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

Crea identificatore/contatore basato su alcune colonne condivise e separato in base ad altre colonne

Usa funzione finestra DENSE_RANK() con un OVER() clausola:

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;

Il PARTITION BY riavvierà il contatore per ogni nuovo valore in column1 , mentre il ORDER BY definisce la classifica.

Suggerimento:non incollare le immagini!

Per la tua prossima domanda, segui il mio esempio per creare un esempio autonomo che riproduca il tuo problema e aggiungi il codice che hai provato tu stesso.