Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tạo mã định danh / bộ đếm dựa trên một số cột được chia sẻ và tách biệt dựa trên các cột khác

Sử dụng hàm cửa sổ DENSE_RANK() với OVER() mệnh đề:

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 sẽ khởi động lại bộ đếm cho từng giá trị mới trong column1 , trong khi ORDER BY xác định thứ hạng.

Gợi ý:Không dán ảnh!

Đối với câu hỏi tiếp theo của bạn, vui lòng làm theo ví dụ của tôi để tạo một ví dụ độc lập mô tả vấn đề của bạn và thêm mã bạn đã tự thử.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giá trị cột danh tính đột nhiên nhảy đến 1001 trong máy chủ sql

  2. Cách chạy công việc tác nhân máy chủ SQL bằng T-SQL

  3. Trung bình của nhiều cột

  4. Cách cài đặt SQLOPS trên máy Mac

  5. Tôi có cần sử dụng khối try..catch và khôi phục rõ ràng trong quy trình SQL Server không?