sql >> Base de Datos >  >> RDS >> Sqlserver

Cree un identificador/contador basado en algunas columnas compartidas y sepárelo en función de otras columnas

Use función de ventana DENSE_RANK() con un 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;

La PARTITION BY reiniciará el contador para cada nuevo valor en column1 , mientras que ORDER BY define la clasificación.

Pista:¡No pegues imágenes!

Para su próxima pregunta, siga mi ejemplo para crear un ejemplo independiente que reproduzca su problema y agregue el código que probó usted mismo.