Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Klauzule příkazu SELECT, která rozdělí výsledek dotazu na skupiny řádků, obvykle provedením jedné nebo více agregací pro každou skupinu. Příkaz SELECT vrátí jeden řádek na skupinu.
Syntax
-- Syntax for SQL Server and Azure SQL Database
-- ISO-Compliant Syntax
GROUP BY {
column-expression
| ROLLUP ( <group_by_expression> [ ,...n ] )
| CUBE ( <group_by_expression> [ ,...n ] )
| GROUPING SETS ( <grouping_set> [ ,...n ] )
| () --calculates the grand total
} [ ,...n ]
<group_by_expression> ::=
column-expression
| ( column-expression [ ,...n ] )
<grouping_set> ::=
() --calculates the grand total
| <grouping_set_item>
| ( <grouping_set_item> [ ,...n ] )
<grouping_set_item> ::=
<group_by_expression>
| ROLLUP ( <group_by_expression> [ ,...n ] )
| CUBE ( <group_by_expression> [ ,...n ] )
-- For backward compatibility only.
-- Non-ISO-Compliant Syntax for SQL Server and Azure SQL Database
GROUP BY {
ALL column-expression [ ,...n ]
| column-expression [ ,...n ] WITH { CUBE | ROLLUP }
}
-- Syntax for Azure Synapse Analytics
GROUP BY {
column-name [ WITH (DISTRIBUTED_AGG) ]
| column-expression
| ROLLUP ( <group_by_expression> [ ,...n ] )
} [ ,...n ]
-- Syntax for Parallel Data Warehouse
GROUP BY {
column-name [ WITH (DISTRIBUTED_AGG) ]
| column-expression
} [ ,...n ]
Arguments
sloupcový výraz
Určuje sloupec nebo neagregační výpočet sloupce. Tento sloupec může patřit do tabulky, odvozené tabulky nebo zobrazení. Sloupec se musí zobrazit v klauzuli FROM příkazu SELECT, ale není nutné, aby se zobrazil v seznamu SELECT.
Platné výrazy najdete ve výrazu.
Sloupec se musí zobrazit v klauzuli FROM příkazu SELECT, ale není nutné, aby se zobrazil v seznamu SELECT. Každý sloupec tabulky nebo zobrazení v libovolném výrazu, který není součástí výběrového <> seznamu, však musí být zahrnut do seznamu GROUP BY:
Jsou povoleny následující příkazy:
SELECT ColumnA, ColumnB FROM T GROUP BY ColumnA, ColumnB;
SELECT ColumnA + ColumnB FROM T GROUP BY ColumnA, ColumnB;
SELECT ColumnA + ColumnB FROM T GROUP BY ColumnA + ColumnB;
SELECT ColumnA + ColumnB + constant FROM T GROUP BY ColumnA, ColumnB;
Následující příkazy nejsou povoleny:
SELECT ColumnA, ColumnB FROM T GROUP BY ColumnA + ColumnB;
SELECT ColumnA + constant + ColumnB FROM T GROUP BY ColumnA + ColumnB;
Výraz sloupce nemůže obsahovat:
- Alias sloupce definovaný v seznamu SELECT. Může použít alias sloupce pro odvozenou tabulku definovanou v klauzuli FROM.
- Sloupec typu text, ntext nebo obrázek Jako argument funkce, která vrací hodnotu platného datového typu, ale můžete použít sloupec textu, ntext nebo obrázek. Výraz může například použít SUBSTRING() a CAST(). To platí také pro výrazy v klauzuli HAVING.
- metody datového typu XML. Může obsahovat uživatelem definovanou funkci, která používá metody datového typu XML. Může obsahovat počítaný sloupec, který používá metody datového typu XML.
- Subquery. Vrátí se chyba 144.
- Sloupec z indexovaného zobrazení
GROUP BY column-expression [ ,... n ]
Seskupí výsledky příkazu SELECT podle hodnot v seznamu jednoho nebo více výrazů sloupce.
Tento dotaz například vytvoří tabulku Sales se sloupci pro Země, Oblast a Prodej. Vloží čtyři řádky a dva řádky mají odpovídající hodnoty pro zemi a oblast.
CREATE TABLE Sales ( Country VARCHAR(50), Region VARCHAR(50), Sales INT );
INSERT INTO sales VALUES (N'Canada', N'Alberta', 100);
INSERT INTO sales VALUES (N'Canada', N'British Columbia', 200);
INSERT INTO sales VALUES (N'Canada', N'British Columbia', 300);
INSERT INTO sales VALUES (N'United States', N'Montana', 100);
Tabulka Sales (Prodej) obsahuje tyto řádky:
| Country | Region | Sales |
|---|---|---|
| Canada | Alberta | 100 |
| Canada | Britská Kolumbie | 200 |
| Canada | Britská Kolumbie | 300 |
| USA | Montana | 100 |
Tento další dotaz seskupí země a oblast a vrátí agregovaný součet pro každou kombinaci hodnot.
SELECT Country, Region, SUM(sales) AS TotalSales
FROM Sales
GROUP BY Country, Region;
Výsledek dotazu má 3 řádky, protože pro zemi a oblast existují tři kombinace hodnot. TotalSales pro Kanadu a Britskou Kolumbii je součet dvou řádků.
| Country | Region | TotalSales |
|---|---|---|
| Canada | Alberta | 100 |
| Canada | Britská Kolumbie | 500 |
| USA | Montana | 100 |
SESKUPOVAT PODLE SOUHRNU
Vytvoří skupinu pro každou kombinaci výrazů sloupců. Kromě toho výsledky "zahrnou" do mezisoučtů a celkových součtů. Uděláte to tak, že se přesune zprava doleva a sníží se počet výrazů sloupců, ve kterých vytváří skupiny a agregace.
Pořadí sloupců má vliv na výstup rollupu a může ovlivnit počet řádků v sadě výsledků.
GROUP BY ROLLUP (col1, col2, col3, col4) Například vytvoří skupiny pro každou kombinaci výrazů sloupců v následujících seznamech.
- sloupec 1, sloupec 2, sloupce 3, sloupce 4
- sloupec 1, sloupec 2, sloupec 3, NUL
- col1, col2, NULL, NULL
- sloupec1, NULL, NULL, NULL
- NULL, NULL, NULL, NULL –-Toto je celkový součet.
Pomocí tabulky z předchozího příkladu tento kód spustí operaci GROUP BY ROLLUP místo jednoduché funkce GROUP BY.
SELECT Country, Region, SUM(Sales) AS TotalSales
FROM Sales
GROUP BY ROLLUP (Country, Region);
Výsledek dotazu má stejné agregace jako jednoduchá funkce GROUP BY bez funkce ROLLUP. Kromě toho vytvoří mezisoučty pro každou hodnotu Země. Nakonec dává celkový součet pro všechny řádky. Výsledek vypadá takto:
| Country | Region | TotalSales |
|---|---|---|
| Canada | Alberta | 100 |
| Canada | Britská Kolumbie | 500 |
| Canada | NULL | 600 |
| USA | Montana | 100 |
| USA | NULL | 100 |
| NULL | NULL | 700 |
SKUPINA PODLE KRYCHLE ( )
GROUP BY CUBE vytváří skupiny pro všechny možné kombinace sloupců. U funkce GROUP BY CUBE (a, b) výsledky obsahují skupiny jedinečných hodnot (a, b), (NULL, b), (a, NULL) a (NULL, NULL).
Pomocí tabulky z předchozích příkladů tento kód spustí operaci GROUP BY CUBE v zemi a oblasti.
SELECT Country, Region, SUM(Sales) AS TotalSales
FROM Sales
GROUP BY CUBE (Country, Region);
Výsledek dotazu obsahuje skupiny pro jedinečné hodnoty (Country, Region), (NULL, Region), (Country, NULL) a (NULL, NULL). Výsledky vypadají takto:
| Country | Region | TotalSales |
|---|---|---|
| Canada | Alberta | 100 |
| NULL | Alberta | 100 |
| Canada | Britská Kolumbie | 500 |
| NULL | Britská Kolumbie | 500 |
| USA | Montana | 100 |
| NULL | Montana | 100 |
| NULL | NULL | 700 |
| Canada | NULL | 600 |
| USA | NULL | 100 |
SESKUPENÍ PODLE SESKUPENÍ MNOŽIN ( )
Možnost GROUPING SETS umožňuje kombinovat více klauzulí GROUP BY do jedné klauzule GROUP BY. Výsledky jsou ekvivalentem funkce UNION ALL zadaných skupin.
Například GROUP BY ROLLUP (Country, Region) a GROUP BY GROUPING SETS ( ROLLUP (Country, Region) ) vrátit stejné výsledky.
Pokud skupiny GROUPING SETS mají dva nebo více prvků, výsledky jsou sjednocením prvků. Tento příklad vrátí sjednocení výsledků funkce ROLLUP a CUBE pro zemi a oblast.
SELECT Country, Region, SUM(Sales) AS TotalSales
FROM Sales
GROUP BY GROUPING SETS ( ROLLUP (Country, Region), CUBE (Country, Region) );
Výsledky jsou stejné jako tento dotaz, který vrací sjednocení dvou příkazů GROUP BY.
SELECT Country, Region, SUM(Sales) AS TotalSales
FROM Sales
GROUP BY ROLLUP (Country, Region)
UNION ALL
SELECT Country, Region, SUM(Sales) AS TotalSales
FROM Sales
GROUP BY CUBE (Country, Region);
SQL nekonsoliduje duplicitní skupiny vygenerované pro seznam GROUPING SETS. Například v GROUP BY ( (), CUBE (Country, Region) )obou prvcích se vrátí řádek pro celkový součet a oba řádky budou uvedeny ve výsledcích.
SKUPINA PODLE ()
Určuje prázdnou skupinu, která vygeneruje celkový součet. To je užitečné jako jeden z prvků GROUPING SET. Tento výpis například poskytuje celkový prodej pro každou zemi/oblast a pak celkový součet pro všechny země/oblasti.
SELECT Country, SUM(Sales) AS TotalSales
FROM Sales
GROUP BY GROUPING SETS ( Country, () );
GROUP BY ALL column-expression [ ,... n ]
Platí pro: SQL Server a Azure SQL Database
Note
Tato syntaxe je poskytována pouze pro zpětnou kompatibilitu. Odebere se v budoucí verzi. Nepoužívejte tuto syntaxi v nové vývojové práci a naplánujte úpravy aplikací, které tuto syntaxi aktuálně používají.
Určuje zahrnutí všech skupin do výsledků bez ohledu na to, jestli splňují kritéria hledání v klauzuli WHERE. Skupiny, které nesplňují kritéria hledání, mají pro agregaci hodnotu NULL.
SESKUPTE PODLE VŠECH:
- Nepodporuje se v dotazech, které přistupují ke vzdáleným tabulkám, pokud je v dotazu také klauzule WHERE.
- U sloupců, které mají atribut FILESTREAM, selže.
GROUP BY column-expression [ ,... n ] WITH { CUBE | ROLLUP }
Platí pro: SQL Server a Azure SQL Database
Note
Tato syntaxe je poskytována pouze pro zpětnou kompatibilitu. Nepoužívejte tuto syntaxi v nové vývojové práci a naplánujte úpravy aplikací, které tuto syntaxi aktuálně používají.
S (DISTRIBUTED_AGG)
Platí pro: Azure Synapse Analytics a Analytics Platform System (PDW)
Tip dotazu DISTRIBUTED_AGG vynutí systém MPP (Massively Parallel Processing), aby před provedením agregace redistribuovali tabulku v určitém sloupci. Pouze jeden sloupec v klauzuli GROUP BY může obsahovat DISTRIBUTED_AGG nápovědu k dotazu. Po dokončení dotazu se redistribuovaná tabulka zahodí. Původní tabulka se nezmění.
POZNÁMKA: DISTRIBUTED_AGG nápovědu k dotazu je poskytována zpětná kompatibilita se staršími verzemi systému PDW (Analytics Platform System) a nezlepší výkon většiny dotazů. MpP už ve výchozím nastavení redistribuuje data podle potřeby, aby se zlepšil výkon agregací.
Obecné poznámky
Jak GROUP BY komunikuje s příkazem SELECT
VYBRAT seznam:
- Vektorové agregáty. Pokud jsou agregační funkce zahrnuté v seznamu SELECT, funkce GROUP BY vypočítá souhrnnou hodnotu pro každou skupinu. Označují se jako vektorové agregace.
- Odlišné agregáty. Agregace AVG (DISTINCT column_name), COUNT (DISTINCT column_name) a SUMA (DISTINCT column_name) jsou podporovány pomocí funkcí ROLLUP, CUBE a GROUPING SETS.
Klauzule WHERE:
- SQL odebere řádky, které nesplňují podmínky v klauzuli WHERE před provedením jakékoli operace seskupení.
MÍT klauzuli:
- SQL používá klauzuli Having k filtrování skupin v sadě výsledků.
Klauzule ORDER BY:
- K seřazení sady výsledků použijte klauzuli ORDER BY. Klauzule GROUP BY neřídí sadu výsledků.
NULL hodnoty:
- Pokud seskupovací sloupec obsahuje hodnoty NULL, považují se všechny hodnoty NULL za stejné a shromažďují se do jedné skupiny.
Limitace a omezení
Platí pro: SQL Server (počínaje verzí 2008) a Azure Synapse Analytics
Maximální kapacita
Pro klauzuli GROUP BY, která používá funkci ROLLUP, CUBE nebo GROUPING SETS, je maximální počet výrazů 32. Maximální počet skupin je 4096 (212). Následující příklady selžou, protože klauzule GROUP BY má více než 4096 skupin.
Následující příklad vygeneruje 4097 (212 + 1) seskupovacích sad a selže.
GROUP BY GROUPING SETS( CUBE(a1, ..., a12), b )Následující příklad vygeneruje skupiny 4097 (212 + 1) a selže.
CUBE ()Sada()seskupení vytvoří celkový součet řádků a duplicitních sad seskupení, ale neodstraní se.GROUP BY GROUPING SETS( CUBE(a1, ..., a12), ())Tento příklad používá zpětně kompatibilní syntaxi. Vygeneruje 8192 (213) sad seskupení a selže.
GROUP BY CUBE (a1, ..., a13) GROUP BY a1, ..., a13 WITH CUBEU zpětně kompatibilních klauzulí GROUP BY, které neobsahují datovou krychli nebo KUMULATIVNÍ, je počet seskupování podle položek omezen velikostí sloupců GROUP BY, agregovanými sloupci a agregovanými hodnotami zahrnutými v dotazu. Tento limit vychází z limitu 8 060 bajtů v přechodné pracovní tabulce, která je potřebná k uložení průběžných výsledků dotazu. Při zadání datové krychle nebo ROLLUP je povoleno maximálně 12 výrazů seskupování.
Podpora funkcí ISO a ANSI SQL-2006 GROUP BY
Klauzule GROUP BY podporuje všechny funkce GROUP BY, které jsou součástí standardu SQL-2006 s následujícími výjimkami syntaxe:
Sady seskupení nejsou v klauzuli GROUP BY povoleny, pokud nejsou součástí explicitního seznamu GROUPING SETS. Například
GROUP BY Column1, (Column2, ...ColumnN) je povolený ve standardu, ale ne v jazyce Transact-SQL. Transact-SQL podporujeGROUP BY C1, GROUPING SETS ((Column2, ...ColumnN))aGROUP BY Column1, Column2, ... ColumnNkteré jsou sémanticky ekvivalentní. Ty jsou sémanticky ekvivalentní předchozímuGROUP BYpříkladu. Je to proto, aby se zabránilo tomu, žeGROUP BY Column1, (Column2, ...ColumnN) může být nesprávně interpretována jakoGROUP BY C1, GROUPING SETS ((Column2, ...ColumnN)), což nejsou sémanticky ekvivalentní.Skupiny nejsou v sadách seskupení povoleny. Například
GROUP BY GROUPING SETS (A1, A2,...An, GROUPING SETS (C1, C2, ...Cn))je povolený ve standardu SQL-2006, ale ne v jazyce Transact-SQL. Transact-SQL umožňujeGROUP BY GROUPING SETS( A1, A2,...An, C1, C2, ...Cn )neboGROUP BY GROUPING SETS( (A1), (A2), ... (An), (C1), (C2), ... (Cn) ), které jsou sémanticky ekvivalentní prvnímu příkladu GROUP BY a mají jasnější syntaxi.FUNKCE GROUP BY [ALL/DISTINCT] je povolená pouze v jednoduché klauzuli GROUP BY, která obsahuje výrazy sloupců. Není povolena pomocí konstruktorů GROUPING SETS, ROLLUP, CUBE, WITH CUBE nebo WITH ROLLUP. ALL je výchozí hodnota a je implicitní. Povoluje se také pouze v zpětně kompatibilní syntaxi.
Porovnání podporovaných funkcí GROUP BY
Následující tabulka popisuje funkce GROUP BY, které jsou podporované na základě verzí SQL a úrovně kompatibility databáze.
| Feature | služba SSIS (SQL Server Integration Services) | Úroveň kompatibility SQL Serveru 100 nebo vyšší | SQL Server 2008 nebo novější s úrovní kompatibility 90. |
|---|---|---|---|
| DISTINCT agregáty | Nepodporuje se u funkce WITH CUBE nebo WITH ROLLUP. | Podporováno pro FUNKCI DATOVÁ KRYCHLE, S KUMULATIVNÍMI SADAMI, SADAMI SESKUPOVÁNÍ, DATOVOU KRYCHLÍ nebo KUMULATIVNÍ. | Stejné jako úroveň kompatibility 100. |
| Uživatelem definovaná funkce s názvem CUBE nebo ROLLUP v klauzuli GROUP BY | Uživatelem definovaná funkce dbo.cube(arg1;... argN) nebo dbo.rollup(arg1;... argN) v klauzuli GROUP BY je povolená. Příklad: SELECT SUM (x) FROM T GROUP BY dbo.cube(y); |
Uživatelem definovaná funkce dbo.cube (arg1,... argN**)** nebo dbo.rollup(arg1;... argN) v klauzuli GROUP BY není povolen. Příklad: SELECT SUM (x) FROM T GROUP BY dbo.cube(y);Vrátí se následující chybová zpráva: Nesprávná syntaxe v blízkosti klíčového slova cube | rollup'." Chcete-li se vyhnout tomuto problému, nahraďte dbo.cube[dbo].[cube] za nebo dbo.rollup za [dbo].[rollup].Následující příklad je povolený: SELECT SUM (x) FROM T GROUP BY [dbo].[cube](y); |
Uživatelem definovaná funkce dbo.cube (arg1,... argN) nebo dbo.rollup(arg1;... argN) v klauzuli GROUP BY je povolená. Příklad: SELECT SUM (x) FROM T GROUP BY dbo.cube(y); |
| SADY SESKUPENÍ | Není podporováno | Supported | Supported |
| CUBE | Není podporováno | Supported | Není podporováno |
| ROLLUP | Není podporováno | Supported | Není podporováno |
| Celkový součet, například GROUP BY () | Není podporováno | Supported | Supported |
| GROUPING_ID funkce | Není podporováno | Supported | Supported |
| FUNKCE SKUPINOVÁNÍ | Supported | Supported | Supported |
| S CUBE | Supported | Supported | Supported |
| S ROLLUPEM | Supported | Supported | Supported |
| Odebrání duplicitních skupin pomocí datové krychle nebo FUNKCE ROLLUP | Supported | Supported | Supported |
Examples
A. Použití jednoduché klauzule GROUP BY
Následující příklad načte celkový součet pro každou SalesOrderID z SalesOrderDetail tabulky. V tomto příkladu se používá AdventureWorks.
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail AS sod
GROUP BY SalesOrderID
ORDER BY SalesOrderID;
B. Použití klauzule GROUP BY s více tabulkami
Následující příklad načte počet zaměstnanců pro každý City z Address tabulky spojené s EmployeeAddress tabulkou. V tomto příkladu se používá AdventureWorks.
SELECT a.City, COUNT(bea.AddressID) EmployeeCount
FROM Person.BusinessEntityAddress AS bea
INNER JOIN Person.Address AS a
ON bea.AddressID = a.AddressID
GROUP BY a.City
ORDER BY a.City;
C. Použití klauzule GROUP BY s výrazem
Následující příklad načte celkové prodeje za každý rok pomocí DATEPART funkce. Stejný výraz musí být v seznamu i SELECTGROUP BY klauzuli.
SELECT DATEPART(yyyy,OrderDate) AS N'Year'
,SUM(TotalDue) AS N'Total Order Amount'
FROM Sales.SalesOrderHeader
GROUP BY DATEPART(yyyy,OrderDate)
ORDER BY DATEPART(yyyy,OrderDate);
D. Použití klauzule GROUP BY s klauzulí HAVING
Následující příklad používá HAVING klauzuli k určení, které skupiny vygenerované v GROUP BY klauzuli by měly být zahrnuty do sady výsledků.
SELECT DATEPART(yyyy,OrderDate) AS N'Year'
,SUM(TotalDue) AS N'Total Order Amount'
FROM Sales.SalesOrderHeader
GROUP BY DATEPART(yyyy,OrderDate)
HAVING DATEPART(yyyy,OrderDate) >= N'2003'
ORDER BY DATEPART(yyyy,OrderDate);
Příklady: Azure Synapse Analytics a paralelní datový sklad
E. Základní použití klauzule GROUP BY
Následující příklad najde celkovou částku pro všechny prodeje každý den. Pro každý den se vrátí jeden řádek obsahující součet všech prodejů.
-- Uses AdventureWorksDW
SELECT OrderDateKey, SUM(SalesAmount) AS TotalSales FROM FactInternetSales
GROUP BY OrderDateKey ORDER BY OrderDateKey;
F. Základní použití nápovědy pro DISTRIBUTED_AGG
Tento příklad používá nápovědu DISTRIBUTED_AGG dotazu k vynucení náhodného prohazování tabulky ve CustomerKey sloupci před provedením agregace.
-- Uses AdventureWorksDW
SELECT CustomerKey, SUM(SalesAmount) AS sas
FROM FactInternetSales
GROUP BY CustomerKey WITH (DISTRIBUTED_AGG)
ORDER BY CustomerKey DESC;
G. Varianty syntaxe pro GROUP BY
Pokud seznam výběru neobsahuje žádné agregace, musí být každý sloupec v seznamu select zahrnut do seznamu GROUP BY. Počítané sloupce v seznamu výběrů mohou být uvedeny, ale nejsou povinné v seznamu GROUP BY. Tady jsou příklady syntakticky platných příkazů SELECT:
-- Uses AdventureWorks
SELECT LastName, FirstName FROM DimCustomer GROUP BY LastName, FirstName;
SELECT NumberCarsOwned FROM DimCustomer GROUP BY YearlyIncome, NumberCarsOwned;
SELECT (SalesAmount + TaxAmt + Freight) AS TotalCost FROM FactInternetSales GROUP BY SalesAmount, TaxAmt, Freight;
SELECT SalesAmount, SalesAmount*1.10 SalesTax FROM FactInternetSales GROUP BY SalesAmount;
SELECT SalesAmount FROM FactInternetSales GROUP BY SalesAmount, SalesAmount*1.10;
H. Použití FUNKCE GROUP BY s více výrazy GROUP BY
Následující příklad seskupuje výsledky pomocí více GROUP BY kritérií. Pokud v rámci každé OrderDateKey skupiny existují podskupiny, které lze odlišit podle DueDateKey, bude pro sadu výsledků definováno nové seskupení.
-- Uses AdventureWorks
SELECT OrderDateKey, DueDateKey, SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey, DueDateKey
ORDER BY OrderDateKey;
I. Použití klauzule GROUP BY s klauzulí HAVING
Následující příklad používá HAVING klauzuli k určení skupin vygenerovaných v GROUP BY klauzuli, které by měly být zahrnuty do sady výsledků. Ve výsledcích budou zahrnuty pouze skupiny s daty objednávek v roce 2004 nebo novějším.
-- Uses AdventureWorks
SELECT OrderDateKey, SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
HAVING OrderDateKey > 20040000
ORDER BY OrderDateKey;
Viz také
GROUPING_ID (Transact-SQL)
SKUPINOVÁNÍ (Transact-SQL)
SELECT (Transact-SQL)
Klauzule SELECT (Transact-SQL)