Torna al Thread
-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-- Usa un db esistente che preferisci
USE [Demo]
GO
-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-- Creo la tabella
CREATE TABLE [dbo].[T1](
[Id] [int] NOT NULL,
[Gruppo] [nchar](10) NULL,
[Ordin] [int] NULL,
CONSTRAINT [PK_T1] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-- Inserisco un po di record
INSERT INTO [dbo].[T1] ([Id], [Ordin], [Gruppo])
VALUES
-- Id Ordin Gruppo
(1, 17, N'a'),
(2, 9, N'a'),
(3, 15, N'a'),
(4, 15, N'a'),
(5, 6, N'a'),
(6, 12, N'b'),
(7, 15, N'b'),
(8, 94, N'b'),
(9, 32, N'b'),
(10, 24, N'b')
GO
-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-- Ora vogliamo sapere per ogni Gruppo ( 'a' oppure 'b' )
-- quale posto occupa in "graduatoria" il nostro record
-- prendendo come riferimenti il campo Ordin
-- In opzione senza la "PARTITION BY Gruppo" non considera il Gruppo
-- Tieni presente che RANK è molto simile a ROW_NUMBER (di cui ho messo anche un esempio)
CREATE VIEW [dbo].[ProvaRank]
AS
SELECT
Id,
Gruppo,
Ordin,
RANK() OVER (PARTITION BY Gruppo ORDER BY Ordin) AS RaxP,
ROW_NUMBER() OVER (PARTITION BY Gruppo ORDER BY Ordin) AS RowP
FROM
dbo.T1
;
GO
-- Finito ------------------------