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

SQL सर्वर:एक क्वेरी में मौजूद पंक्ति, दूसरे में अनुपलब्ध

संभावित स्पष्टीकरण का प्रदर्शन।

टेबल स्क्रिप्ट बनाएं

SELECT *
INTO #T
 FROM master.dbo.spt_values

 CREATE NONCLUSTERED INDEX [IX_T] ON  #T ([name] DESC,[number] DESC);

प्रश्न एक (35 परिणाम देता है)

WITH cte AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY NAME) AS rn
 FROM  #T
)
SELECT c1.number,c1.[type] 
FROM cte c1
JOIN cte c2 ON c1.rn=c2.rn AND c1.number <> c2.number

प्रश्न दो (पहले की तरह ही लेकिन c2 को जोड़ने पर। [प्रकार] चयन सूची में यह 0 परिणाम देता है);

WITH cte AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY NAME) AS rn
 FROM  #T
)
SELECT c1.number,c1.[type] ,c2.[type] 
FROM cte c1
JOIN cte c2 ON c1.rn=c2.rn AND c1.number <> c2.number

क्यों?

Row_number() डुप्लिकेट NAMEs के लिए निर्दिष्ट नहीं है, इसलिए यह आवश्यक आउटपुट कॉलम के लिए सर्वोत्तम निष्पादन योजना के साथ जो भी फिट बैठता है उसे चुनता है। दूसरी क्वेरी में यह दोनों सीटीई आमंत्रणों के लिए समान है, पहले में यह परिणामी विभिन्न पंक्ति_नंबरिंग के साथ एक अलग पहुंच पथ चुनता है।

सुझाए गए समाधान

आप स्वयं सीटीई में ROW_NUMBER() over (order by t.[Date]) में शामिल हो रहे हैं

उम्मीद की जा सकती है कि सीटीई के विपरीत भौतिक नहीं होना जो स्वयं में शामिल होने के लिए एकरूपता सुनिश्चित करता और इस प्रकार आप ROW_NUMBER() के बीच एक सहसंबंध मान लेते हैं दोनों पक्षों पर जो रिकॉर्ड के लिए मौजूद नहीं हो सकते हैं जहां एक डुप्लिकेट [Date] डेटा में मौजूद है।

क्या होगा यदि आप ROW_NUMBER() over (order by t.[Date], t.[id]) के अनुसार ऑर्डर करें। यह सुनिश्चित करने के लिए कि बंधी हुई तिथियों की स्थिति में row_numbering एक गारंटीकृत सुसंगत क्रम में है। (या कुछ अन्य कॉलम/स्तंभों का संयोजन जो रिकॉर्ड में अंतर कर सकते हैं यदि आईडी ऐसा नहीं करेगी)



  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 सर्वर:क्रॉस जॉइन और फुल आउटर जॉइन में क्या अंतर है?

  2. संदेश 8672, स्तर 16, राज्य 1, पंक्ति 1 MERGE कथन ने एक ही पंक्ति को एक से अधिक बार अद्यतन या हटाने का प्रयास किया

  3. SQL सर्वर में इस विशिष्ट सबस्ट्रिंग को कैसे निकालें?

  4. टी-एसक्यूएल में एकाधिक कॉलम पिवट

  5. SQL सर्वर में क्लॉज द्वारा ओवर क्लॉज और पार्टिशन के साथ रनिंग टोटल की गणना करना