Číslovanie riadkov v SELECT-e
Číslo riadka vo výsledku SELECT-u má okrem informatívnej hodnoty (napríklad vizuálna kontrola výsledku) aj funkčné využitie. Môžeme ho použiť napríklad ako pomocný identifikátor riadka v dočasnej tabuľke, ak ostatné hodnoty v riadkoch nemusia byť unikátne.Na očíslovanie riadka môžeme použiť funkciu ROW_NUMBER, ktorá pomocou svojej ORDER BY klauzuly zoradí riadky vo výsledku. V prípade, ak potrebujeme číslovanie v rámci nejakej podskupiny dát, môžeme použiť nepovinný argument PARTITION BY.V nasledujúcom príklade očíslujeme všetky riadky výsledku SELECT-u do stĺpca LineNum a pomocou PARTITION BY si očíslujeme riadky podľa krstného mena FirstName do stĺpca NameNum.
Viac info:
docs.microsoft.com - ROW_NUMBER (Transact-SQL) > link <
Keywords: MS SQL, SELECT, ROW_NUMBER
Zdrojový kód:
/*Testovacia tabulka*/
CREATE TABLE #Data ([FirstName] NVARCHAR(50), [LastName] NVARCHAR(100))/*Testovacie data*/
INSERT INTO #Data ([FirstName], [LastName])
SELECT 'Janko', 'Mrkvicka'
UNION ALL
SELECT 'Janko', 'Hraško'
UNION ALL
SELECT 'Peter', 'Slovak'
UNION ALL
SELECT 'Peter', 'Vysoky'
UNION ALL
SELECT 'Marek', 'Toth'
UNION ALL
SELECT 'Marek', 'Kovac'/*Ocislujeme riadky*/
SELECT
ROW_NUMBER() OVER (ORDER BY [FirstName], [LastName]) as [LineNum],
ROW_NUMBER() OVER (PARTITION BY [FirstName] ORDER BY [FirstName], [LastName]) as [NameNum],
[FirstName], [LastName]
FROM #Data
ORDER BY [FirstName], [LastName]/*Vymaz testovacej tabulky*/
DROP TABLE #Data
CREATE TABLE #Data ([FirstName] NVARCHAR(50), [LastName] NVARCHAR(100))/*Testovacie data*/
INSERT INTO #Data ([FirstName], [LastName])
SELECT 'Janko', 'Mrkvicka'
UNION ALL
SELECT 'Janko', 'Hraško'
UNION ALL
SELECT 'Peter', 'Slovak'
UNION ALL
SELECT 'Peter', 'Vysoky'
UNION ALL
SELECT 'Marek', 'Toth'
UNION ALL
SELECT 'Marek', 'Kovac'/*Ocislujeme riadky*/
SELECT
ROW_NUMBER() OVER (ORDER BY [FirstName], [LastName]) as [LineNum],
ROW_NUMBER() OVER (PARTITION BY [FirstName] ORDER BY [FirstName], [LastName]) as [NameNum],
[FirstName], [LastName]
FROM #Data
ORDER BY [FirstName], [LastName]/*Vymaz testovacej tabulky*/
DROP TABLE #Data
Viac info:
docs.microsoft.com - ROW_NUMBER (Transact-SQL) > link <
Keywords: MS SQL, SELECT, ROW_NUMBER