sql >> Database >  >> RDS >> Sqlserver

Maak een identifier/teller op basis van enkele gedeelde kolommen en scheid deze op basis van andere kolommen

Gebruik vensterfunctie DENSE_RANK() met een OVER() clausule:

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;

De PARTITION BY zal de teller opnieuw starten voor elke nieuwe waarde in column1 , terwijl de ORDER BY bepaalt de rangorde.

Hint:plak geen afbeeldingen!

Volg voor uw volgende vraag mijn voorbeeld om een ​​op zichzelf staand voorbeeld te maken waarin uw probleem wordt gereproduceerd en voeg de code toe die u zelf hebt geprobeerd.




  1. Uw ultieme gids voor SQL Join:INNER JOIN - Deel 1

  2. Hoe selecteer ik een string tussen twee strings in een kolom in SQL Server?

  3. Waarom mislukt het maken van Foreign Key in Laravel 5.8?

  4. Hoe mysql-databases verwijderen en opnieuw vullen?