Recently, one of blog reader asked that how he can achieve following goals regarding row number for one of his sample table.
Team | Player |
South Zone | SZ_Player1 |
South Zone | SZ_Player2 |
South Zone | SZ_Player3 |
North Zone | NZ_Player1 |
North Zone | NZ_Player2 |
National Team | NT_Player1 |
National Team | NT_Player2 |
· A column which should return distinct sequential row number for all result rows
· A column which should return distinct sequential row numbers for a specific partition i.e. Each team member sequential number
· A column which should return distinct sequential number for each team
And results must be like this
Team | Player | Record Number | Team Member Number | Team Number |
South Zone | SZ_Player1 | 1 | 1 | 1 |
South Zone | SZ_Player2 | 2 | 2 | 1 |
South Zone | SZ_Player3 | 3 | 3 | 1 |
North Zone | NZ_Player1 | 4 | 1 | 2 |
North Zone | NZ_Player2 | 5 | 2 | 2 |
National Team | NT_Player1 | 6 | 1 | 3 |
National Team | NT_Player2 | 7 | 2 | 3 |
Solution:
ROW_NUMBER() will be used to achieve first two goals as ROW_NUMBER() return sequential row number within a partition of result set. And for last column we will use DENSE_RANK(), which will return rank of rows within the partition of a result set.
--Create temporary table for query testing
CREATE TABLE #TeamPlayer
(
Team VARCHAR(25),
PlayerName VARCHAR(25)
)
GO
-- Insert temporary records
INSERT INTO #TeamPlayer ( Team, PlayerName )
SELECT 'South Zone',
'SZ_Player1'
UNION ALL
SELECT 'South Zone',
'SZ_Player2'
UNION ALL
SELECT 'South Zone',
'SZ_Player3'
UNION ALL
SELECT 'North Zone',
'NS_Player1'
UNION ALL
SELECT 'North Zone',
'NS_Player2'
UNION ALL
SELECT 'National Team',
'NT_Player1'
UNION ALL
SELECT 'National Team',
'NT_Player2'
GO
-- Query to get results
SELECT Team,
PlayerName,
DENSE_RANK() OVER ( ORDER BY Team ) AS TeamNumber,
ROW_NUMBER() OVER ( PARTITION BY Team ORDER BY PlayerName ) AS TeamMemberNumber,
ROW_NUMBER() OVER ( ORDER BY PlayerName ) AS RecordNumber
FROM #TeamPlayer
GO
DROP TABLE #TeamPlayer
No comments:
Post a Comment
All suggestions are welcome