sql >> Databáze >  >> RDS >> Sqlserver

Vytvořte identifikátor/počítadlo na základě některých sdílených sloupců a oddělte je na základě jiných sloupců

Použijte funkce okna DENSE_RANK() s OVER() klauzule:

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 znovu spustí počítadlo pro každou novou hodnotu ve column1 , zatímco ORDER BY definuje pořadí.

Tip:Nevkládejte obrázky!

Pro vaši další otázku postupujte podle mého příkladu a vytvořte samostatný příklad reprodukující váš problém a přidejte kód, který jste sami vyzkoušeli.




  1. Ekvivalent funkce REPEAT v Oracle

  2. Nechápu, jak funguje nextval() postgresql, může to někdo vysvětlit?

  3. Potřebujete dotaz, abyste získali seznam použitých a nepoužitých tabulek

  4. Objednávejte pomocí polských písmen