select imie, nazwisko,'zaw' from zawodnicy union select imie_t, nazwisko_t, 'tren' from trenerzy select imie, nazwisko from zawodnicy where wzrost > 170 except select imie, nazwisko from zawodnicy where waga < 65 -- str 29 --cw 54,55 select imie, nazwisko, kraj from zawodnicy union select distinct imie_t, nazwisko_t, COALESCE(z.kraj,'bd') from trenerzy t left join zawodnicy z on t.id_trenera = z.id_trenera -- dodatkowe /* 1) Sprawdź ile osób (ternerów i zawodników) urodziło się w danym miesiącu. Wypisz wszystkie miesiące od stycznia do grudnia */ select c.m,d.ile from (select format(datefromparts(2000,id_zawodnika,1),'MMMM','pl-pl') m from zawodnicy where id_zawodnika < 13) c left join (select msc, count(imie) ile from (select imie, nazwisko ,format(datefromparts(2000,miesiac,1),'MMMM','pl-pl') msc from (select imie, nazwisko, MONTH(data_ur) miesiac from zawodnicy union select imie_t, nazwisko_t, MONTH(data_ur_t) from trenerzy) a) b group by msc) d on c.m=d.msc --2) znajdz te kraje, które znajdują sie zarówno w tabeli skocznie i zawodnicy -- i wyświetl ilu jest zawodników z danego kraju (kolumna Zaw) i ile jest skoczni -- z danego kraju (kolumna skocznie) */ select a.kraj, a.ile zaw, b.ile skocznie from (select kraj, count(*) ile from zawodnicy group by kraj) a join (select kraj_skoczni, count(*) ile from skocznie group by kraj_skoczni) b on a.kraj=b.kraj_skoczni /*3) Z zawodników wypisz 3 kolumny: imie, nazwisko i typ wzrostu, którzy przyjmuje tylko 3 wartości: niski lub średni lub wysoki. wartości czy ktoś jest niski śrendni czy wysoki powinny być dobrane automatycznie przez podzielenie na równo przedziału wartości wzrostów */ select imie, nazwisko, wzrost, 'sredni' typ from zawodnicy except ( select imie, nazwisko, wzrost, 'sredni' typ from zawodnicy where wzrost < (select min(wzrost) from zawodnicy) + (select (MAX(wzrost) - min(wzrost))/3 from zawodnicy) union select imie, nazwisko, wzrost, 'sredni' typ from zawodnicy where wzrost > (select max(wzrost) from zawodnicy) - (select (MAX(wzrost) - min(wzrost))/3 from zawodnicy) ) union select imie, nazwisko, wzrost, 'niscy' typ from zawodnicy where wzrost < (select min(wzrost) from zawodnicy) + (select (MAX(wzrost) - min(wzrost))/3 from zawodnicy) union select imie, nazwisko, wzrost, 'wysocy' typ from zawodnicy where wzrost > (select max(wzrost) from zawodnicy) - (select (MAX(wzrost) - min(wzrost))/3 from zawodnicy) (SELECT {distinct} FUNKCJE | IIF | CASE WHEN END | FROM {{left} | {right} | join} WHERE GROUP BY HAVING ORDER BY UNION {ALL} | INTERSECT | EXCEPT ) B -- DLA KAZDEGO KRAJU WYPISZ SUMĘ WAGI select kraj,wartosc from (SELECT kraj , sum(waga) wartosc,1 typ from zawodnicy group by kraj union select 'suma', sum(waga),2 typ from zawodnicy) a order by typ select isnull(kraj,'bd') ,sum(waga) from zawodnicy group by rollup (kraj) select * from zawodnicy select COALESCE(id_trenera,wzrost,waga,'x') from zawodnicy select TOP 1 kraj_skoczni , COUNT(*) from skocznie GROUP BY ROLLUP (kraj_skoczni) ORDER BY kraj_skoczni -- wskaż najwyższego zawodnika select * from zawodnicy where wzrost = (SELECT top 1 wzrost from zawodnicy order by wzrost desc) -- wskaż najcieższego z polaków (str 11 , cw 21 i 22) select * from zawodnicy where kraj = 'pol' and waga = (SELECT top 1 waga from zawodnicy where kraj = 'pol' order by waga desc) select imie, nazwisko ,id_zawodnika from zawodnicy order by id_zawodnika offset 3 rows fetch next 6 rows only -- dla kazdego zawodnika wypisz kraj, wagę i połowę roku w której się urodził -- (pierwsza lub druga) select kraj, polowa, sum(waga) from (select kraj, waga , iif(month(data_ur)>6,'druga','pierwsza') polowa from zawodnicy) t group by cube(kraj, polowa) -- dla kazego zawodnika wypisz wagę, kraj, połowę roku select * from (select kraj, waga , iif(month(data_ur)>6,'druga','pierwsza') polowa from zawodnicy) t pivot ( sum(waga) for polowa in ([pierwsza],[druga]) ) p -- dla każdego miesiaca wypisz ile osób urodziło się -- w danym miesiącu (kategoria wierszowa). -- kategoria wierszowa to informacja czy jest to trener czy zawodnik np: miesiac | zawodnicy | trenerzy styczen 2 3 luty 4 5 marzec 2 5 select * from (select imie+ nazwisko nazwa, format(data_ur,'MMMMM') miesiac, 'zawodnicy' typ from zawodnicy union select imie_t+ nazwisko_T, format(data_ur_T,'MMMMM'), 'trenerzy' from trenerzy) t pivot ( count(nazwa) for typ in ([zawodnicy],[trenerzy]) ) p -- dla kazdego trenera wypisac imiona jego podopiecznych select t.imie_t, z.imie from trenerzy t left join zawodnicy z on t.id_trenera = z.id_trenera SELECT imie_t, (select REPLACE(imie+',','<imie>','') from zawodnicy where id_trenera = t.id_trenera for xml path('')) from trenerzy t /* dla kazdego zawodnika wypisz w jednej komórce wszystkie nazwy zawodów w jakich startował */ select imie + ' ' + nazwisko, ( select replace(b,'<b>','') from (select (select imie + ' ' + nazwisko from zawodnicy where id_zawodnika = u.id_zawodnika) a, (select nazwa from zawody where id_zawodow = u.id_zawodow)+',' b from uczestnictwa u) t where a = z.imie + ' ' + z.nazwisko for xml path('') ) from zawodnicy z select * from zawodnicy select * from zawody -- funkcje okienkowe select imie, nazwisko, wzrost , lead(nazwisko,2) over (order by wzrost) from zawodnicy order by wzrost -- 1) wypisz wszystkich zawodników, któych wwzrost jest 4-ty co do wielkości select * from (select wzrost , rank() over (order by wzrost) r, imie, nazwisko from zawodnicy) t where r=4 -- 2) dla każego zawodnika wypisz o ile jest on wyższy od -- zawodnika poprzedniego (względem wzrostu) select imie, nazwisko , wzrost - lag(wzrost,1) over (order by wzrost) from zawodnicy select imie, nazwisko, wzrost kraj, rank() over (partition by kraj order by wzrost ) from zawodnicy select imie, nazwisko, wzrost ,kraj, max(wzrost) over (partition by kraj ) from zawodnicy CREATE PROC SearchAllTables ( @SearchStr nvarchar(100) ) AS BEGIN CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630)) SET NOCOUNT ON DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110) SET @TableName = '' SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''') WHILE @TableName IS NOT NULL BEGIN SET @ColumnName = '' SET @TableName = ( SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName AND OBJECTPROPERTY( OBJECT_ID( QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) ), 'IsMSShipped' ) = 0 ) WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL) BEGIN SET @ColumnName = ( SELECT MIN(QUOTENAME(COLUMN_NAME)) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2) AND TABLE_NAME = PARSENAME(@TableName, 1) AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar') AND QUOTENAME(COLUMN_NAME) > @ColumnName ) IF @ColumnName IS NOT NULL BEGIN INSERT INTO #Results EXEC ( 'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) FROM ' + @TableName + ' (NOLOCK) ' + ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2 ) END END END SELECT ColumnName, ColumnValue FROM #Results END EXEC SearchAllTables 'war' SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.zawodnicy') select * from zawodnicy where kraj = 'pol' select top 4 * from zawodnicy select * from INFORMATION_SCHEMA.COLUMNS