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

SQL सर्वर 2008 में group_concat

2005 और नए संस्करण के अनुसार SQL सर्वर में, आप ROW_NUMBER के साथ CTE (कॉमन टेबल एक्सप्रेशन) का उपयोग कर सकते हैं डुप्लिकेट को खत्म करने का कार्य:

;WITH LastPerUser AS
(
   SELECT 
       ID, UserID, ClassID, SchoolID, Created,
       ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum'
   FROM dbo.YourTable
)
SELECT 
   ID, UserID, ClassID, SchoolID, Created,
FROM LastPerUser
WHERE RowNum = 1

यह सीटीई आपके डेटा को UserID . द्वारा "विभाजित" करता है , और प्रत्येक विभाजन के लिए, ROW_NUMBER 1 से शुरू होकर और DESC बनाया . द्वारा आदेशित, अनुक्रमिक संख्याओं को कार्य करता है - इसलिए नवीनतम पंक्ति को RowNum =1 . मिलता है (प्रत्येक UserID . के लिए ) जिसे मैं इसके बाद के SELECT स्टेटमेंट में CTE से चुनता हूं।

उसी सीटीई का उपयोग करके, आप आसानी से डुप्लीकेट भी हटा सकते हैं:

;WITH LastPerUser AS
(
   SELECT 
       ID, UserID, ClassID, SchoolID, Created,
       ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum'
   FROM dbo.YourTable
)
DELETE FROM dbo.YourTable t
FROM LastPerUser cte
WHERE t.ID = cte.ID AND cte.RowNum > 1

एक ही सिद्धांत लागू होता है:आप कुछ मानदंडों द्वारा अपने डेटा को "समूह" (या विभाजन) करते हैं, आप प्रत्येक डेटा विभाजन के लिए लगातार सभी पंक्तियों को क्रमित करते हैं, और "विभाजित पंक्ति संख्या" के लिए 1 से बड़े मान वाले को <कोड द्वारा हटा दिया जाता है>हटाएं ।



  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 मूल क्लाइंट (Windows 7 - IIS7) का उपयोग करके क्लासिक ASP से SQL Server 2008 R2 से कनेक्ट नहीं हो सकता

  2. आश्रित तालिकाओं से डेटा हटाएं

  3. डेटाटाइम के दिनांक भाग पर केवल एक अद्वितीय बाधा कैसे बनाएं?

  4. टेक्स्ट के रूप में डेटा प्रकार वाले डिस्टिंक्ट के रूप में फ़ील्ड का चयन करें। एस क्यू एल सर्वर

  5. SQL सर्वर 2019 का पहला सार्वजनिक पूर्वावलोकन:CTP 2.0