Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Utwórz identyfikator/licznik na podstawie niektórych wspólnych kolumn i oddziel na podstawie innych kolumn

Użyj funkcja okna DENSE_RANK() z OVER() klauzula:

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 zrestartuje licznik dla każdej nowej wartości w column1 , natomiast ORDER BY definiuje ranking.

Wskazówka:nie wklejaj zdjęć!

W przypadku następnego pytania postępuj zgodnie z moim przykładem, aby utworzyć samodzielny przykład odtwarzający Twój problem i dodaj kod, który sam wypróbowałeś.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2008 - oddzielanie pola Adres

  2. Uprawnienia usług SQL Server 2008 Reporting Services

  3. przekonwertuj varchar (ddmmyyyy) na format daty

  4. Jak usunąć właściwość tożsamości kolumny w tabeli SQL Server — samouczek SQL Server / T-SQL 44

  5. Uzupełnij ciąg zerami na początku, aby miał 3 znaki w SQL Server 2008