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 ------------------------
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5