2009-02-28 22 views
40

मैं एक ही तालिका में अन्य पंक्तियों की उपस्थिति के आधार पर SQL सर्वर 2000/2005 तालिका चर से पंक्तियों को हटाना चाहता हूं (सभी 0 गिनती पंक्तियों को हटाएं यदि गैर-0 गिनती है पंक्ति एक ही तारीख के साथ मौजूद है)। यहाँ एक सरल उदाहरण है कि केवल हटा देना चाहिए पंक्ति पहले जोड़ा है:स्टेटमेंट से हटाए गए उपनाम में उपनाम

declare @O table (
    Month datetime, 
    ACount int NULL 
) 

insert into @O values ('2009-01-01', 0) 
insert into @O values ('2009-01-01', 1) 
insert into @O values ('2008-01-01', 1) 
insert into @O values ('2007-01-01', 0) 

delete from @O o1 
where ACount = 0 
    and exists (select Month from @O o2 where o1.Month = o2.Month and o2.ACount > 0) 

समस्या यह है कि मैं एसक्यूएल सर्वर तालिका चर के O1 उर्फ ​​स्वीकार करने के लिए नहीं मिल सकता है (और मुझे लगता है कि एक उपनाम की वजह से आवश्यक है "o1.Month = o2.Month" मिलान क्षेत्र के नाम)। त्रुटि है:

संदेश 102, स्तर 15, राज्य 1, रेखा 11

गलत वाक्य रचना के पास 'O1'।

उत्तर

52

से पहले से बयान अर्थ, आप aliased मेज से हटा रहे हैं उर्फ ​​नाम निर्दिष्ट करें।

delete o1 
from @O as o1 
where ACount = 0 
     and exists (select Month 
        from @O o2 
        where o1.Month = o2.Month 
          and o2.ACount > 0) 


परिणाम

alt text

+0

वाह, इस वाक्यविन्यास के बारे में नहीं पता था! अगर आपने छवि को चिपकाया नहीं है, तो मैंने इसे अमान्य के रूप में खारिज कर दिया होगा। क्या यह SQL2000 या केवल SQL Server 2005 पर काम करता है? मैं अभी घर पर हूं इसलिए सीधे सत्यापित नहीं कर सकता। –

+0

इसे एसक्यूएल 2k/2k5/2k8 पर काम करना चाहिए (स्क्रीनशॉट पर 2k8 पर इसका परीक्षण किया गया था) - एसक्यूएल 7 के साथ कभी निपटा नहीं है, इसलिए 7 के बारे में सुनिश्चित नहीं है – Sung

8

इस प्रयास करें, यह काम करना चाहिए (से पहले वैकल्पिक है):

DELETE [FROM] @O 
FROM @O o1 
where ACount = 0 
and exists (select Month from @O o2 
     where o1.Month = o2.Month and o2.ACount > 0) 

तर्क है: हटाएँ, के रूप में here समझाया, एक गैर-एलियाज्ड टेबल firs की उम्मीद है टी, एक वैकल्पिक से पहले इसे कर सकते हैं। उसके बाद आप दूसरे से एक टेबल पर उपनाम डाल सकते हैं, अगर आपको जॉइन, सबक्वायरी इत्यादि की आवश्यकता है

संबंधित मुद्दे