Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Crie identificador/contador com base em algumas colunas compartilhadas e separe com base em outras colunas


Use função de janela DENSE_RANK() com um OVER() cláusula:
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;

A PARTITION BY irá reiniciar o contador para cada novo valor em column1 , enquanto o ORDER BY define a classificação.

Dica:não cole imagens!


Para sua próxima pergunta, siga meu exemplo para criar um exemplo autônomo que reproduza seu problema e adicione o código que você tentou por conta própria.