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

Cột giống danh tính nhưng dựa trên tiêu chí Nhóm Theo

Tôi đồng ý với Sean - thêm một cột danh tính, sau đó chỉ cần sử dụng một cột được tính toán cho id nhiệm vụ. Lý do cho điều này là bạn muốn sử dụng task_id như một phần của khóa chính.
Tuy nhiên, tôi không chắc điều đó có thể xảy ra, vì để đưa một cột được tính toán vào khóa chính, cột đó phải được persisted và vì một số lý do (tôi nghĩ đó là do sử dụng UDF) SQL Server sẽ không cho phép tôi đánh dấu nó là tồn tại.
Dù sao, đây là giải pháp được đề xuất của tôi cho việc này:

Đầu tiên, hãy tạo một hàm sẽ tính toán id tác vụ:

CREATE FUNCTION dbo.GenerateTaskId
(
    @Row_Id int,
    @Issue_Id int,
    @Issue_Sub_Id int
)
RETURNS Int
AS
BEGIN

    RETURN 
    (
        SELECT COUNT(*)
        FROM dbo.Tasks
        WHERE Issue_Id = @Issue_Id
        AND Issue_Sub_ID = @Issue_Sub_ID
        AND Row_Id <= @Row_Id
    )
END
GO 

Sau đó, tạo bảng với id nhiệm vụ dưới dạng cột được tính toán:

CREATE TABLE dbo.Tasks
(
    Row_Id [int] IDENTITY(1,1),
    Issue_ID [int] NOT NULL,
    Issue_Sub_ID [int] NOT NULL,
    Task_Id AS dbo.GenerateTaskId(Row_Id, Issue_Id, Issue_Sub_Id), 
    CONSTRAINT PK_Tasks PRIMARY KEY (Row_Id)
)
GO

Bây giờ, hãy kiểm tra nó:

INSERT INTO Tasks VALUES
(12345, 1),
(12345, 1),
(12345, 1),
(12345, 2),
(12345, 2),
(67890, 2),
(67890, 2),
(67890, 2)

SELECT *
FROM Tasks

Kết quả:

Row_Id  Issue_ID    Issue_Sub_ID    Task_Id
1       12345       1               1
2       12345       1               2
3       12345       1               3
4       12345       2               1
5       12345       2               2
6       67890       2               1
7       67890       2               2
8       67890       2               3

Bạn có thể xem bản demo trực tiếp trên rextester.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CONVERT () từ Ngày / Giờ thành Ví dụ về chuỗi trong SQL Server

  2. SQL Server chuyển đổi chuỗi thành datetime

  3. Cách tìm bảng chứa một cột cụ thể trong SQL Server

  4. CTE để nhận tất cả các con (con cháu) của một phụ huynh

  5. Tính tổng chi phí sở hữu theo dõi máy chủ SQL của bạn