Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

पहचान जैसा कॉलम लेकिन ग्रुप बाय मापदंड पर आधारित

मैं शॉन से सहमत हूं - एक पहचान कॉलम जोड़ें, और फिर कार्य आईडी के लिए एक गणना कॉलम का उपयोग करें। भले ही मैंने यहां इस तरह के एक प्रश्न का उत्तर दिया है, मैं इसे डुप्लिकेट के रूप में चिह्नित करने के बारे में निश्चित नहीं हूं। इसका कारण यह है कि आप task_id . का उपयोग करना चाहते हैं प्राथमिक कुंजी के एक भाग के रूप में।
हालांकि, मुझे यकीन नहीं है कि यह संभव है, क्योंकि प्राथमिक कुंजी में एक गणना किए गए कॉलम को शामिल करने के लिए इसे persisted होना चाहिए। , और किसी कारण से (मुझे लगता है कि यह यूडीएफ के उपयोग के कारण है) SQL सर्वर मुझे इसे जारी रखने की अनुमति नहीं देगा।
वैसे भी, इसके लिए मेरा प्रस्तावित समाधान यहां है:

सबसे पहले, एक फ़ंक्शन बनाएं जो कार्य आईडी की गणना करेगा:

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 

फिर, गणना किए गए कॉलम के रूप में कार्य आईडी के साथ तालिका बनाएं:

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

अब, इसका परीक्षण करें:

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

SELECT *
FROM Tasks

परिणाम:

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

आप रेक्सटेस्टर पर लाइव डेमो देख सकते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. T-SQL का उपयोग करके SQL सर्वर में डेटाबेस का पुनर्प्राप्ति मॉडल कैसे प्राप्त करें

  2. DATEDIFF_BIG() SQL सर्वर में उदाहरण

  3. एक कॉलम के लिए SQL Server 2008 हजारों विभाजक

  4. मैं एक अद्वितीय बाधा कैसे बना सकता हूं जो नल को भी अनुमति देता है?

  5. SQL सर्वर रनिंग क्वेरी मॉनिटरिंग