sql >> Databasteknik >  >> RDS >> Sqlserver

Skapa identifierare/räknare baserat på vissa delade kolumner och separera baserat på andra kolumner

Använd fönsterfunktion 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 kommer att starta om räknaren för varje nytt värde i column1 , medan ORDER BY definierar rankningen.

Tips:Klistra inte in bilder!

För din nästa fråga, följ mitt exempel för att skapa ett fristående exempel som återger ditt problem och lägg till koden du själv har provat.




  1. Hur får man det aktuella databastransaktions-ID med JDBC eller Hibernate?

  2. psycopg2.ProgrammingError:relationsmatchningar finns inte

  3. Installera MySQL på Ubuntu utan en lösenordsuppmaning

  4. Konvertera sträng med uttryck till decimal