sql >> Database teknologi >  >> RDS >> Sqlserver

Opret identifikator/tæller baseret på nogle delte kolonner og adskilt baseret på andre kolonner

Brug vinduefunktion DENSE_RANK() med en OVER() klausul:

DECLARE @tbl TABLE(Column1 INT,Column2 INT,Column3 VARCHAR(100));
INSERT INTO @tbl VALUES(1,1,'A')
                      ,(1,2,'A') 
                      ,(1,3,'B') 
                      ,(2,1,'A') 
                      ,(2,2,'A') 
                      ,(2,3,'B') 
                      ,(3,1,'A') 
                      ,(3,2,'B') 
                      ,(3,3,'V');

SELECT *
      ,DENSE_RANK() OVER(PARTITION BY Column1 ORDER BY Column3) AS ComputedColumn
FROM @tbl;

PARTITION BY vil genstarte tælleren for hver ny værdi i column1 , mens ORDER BY definerer rangeringen.

Tip:Indsæt ikke billeder!

For dit næste spørgsmål, følg venligst mit eksempel for at oprette et enkeltstående eksempel, der gengiver dit problem, og tilføj den kode, du selv har prøvet.




  1. Hvilken af ​​disse 2 databaseopsætninger skal jeg vælge?

  2. hvordan man sender parameter med anførselstegn

  3. SQL Server automatiserede sikkerhedskopier

  4. mysql kan ikke give privilegier til brugeren, får fejl:FEJL 1819 (HY000):Din adgangskode opfylder ikke de nuværende politikkrav