2010-11-19 11 views
5

मैं SQL सर्वर 2008 पर एक छोटी संग्रहीत प्रक्रिया विकसित कर रहा हूं। मुझे SQL क्वेरी पर थोड़ा ज्ञान नहीं है, लेकिन सरल कार्यों को प्राप्त करने के लिए पर्याप्त है। हालांकि मैं एक समस्या के साथ आया मैं खुद को हल नहीं कर सकता। मेरी समस्या को समझने से पहले, कृपया मुझे क्षमा करें यदि मैं एक SQL क्वेरी-शब्द गलत वर्तनी करता हूं क्योंकि मैं मूल अंग्रेजी स्पीकर नहीं हूं।किसी अन्य फ़ील्ड मान के आधार पर फ़ील्ड को कैसे समेटना है?

ID, NAME, VALUES, ANSWER 
25, Tom , 2400 , 0     
25, Tom , 600 , 0     
25, Tom , 500 , 1     
25, Tom , 300 , 1     
27, Jerry, 100, 0     
27, Jerry, 20, 1     
27, Jerry, 60, 1     
27, Jerry, 2000, 0  

मुझे क्या करना चाहते हैं positive when ANSWER = 1 और negative when ANSWER = 0 नाम के एक क्षेत्र में अपने ID और NAME, ऊपर समाप्त करें यह के मूल्यों से चयन द्वारा समूह है:

मैं 4 क्षेत्रों (सीएसवी प्रतिनिधित्व) की है।

ID, NAME, SUM, NEGATIVE, POSITIVE 
25, Tom, 3000, 800     
27, Jerry, 2100, 80 

मुझे लगता है कि मेरे प्रश्न से कई बार पूछा गया है, लेकिन मैं इसके बारे में कुछ भी नहीं ढूंढ पाया, शायद इसलिए कि मैं गलत शर्तों का उपयोग कर रहा हूं। वैसे भी अगर कोई मदद कर सकता है तो मुझे बहुत समय बचाएगा।

+0

http://stackoverflow.com/questions/30563/sql-returning-the-sum-of-items-depending-on-which-type-it-is – JNK

+0

+1, सिर्फ इसलिए कि यह वास्तव में एक सुंदर कुआं है सवाल पूछा। (संपादक के लिए भी धन्यवाद।) यह सरल, चित्रकारी इनपुट डेटा मिला है और वास्तव में वांछित परिणाम सेट दिखाता है। – Matt

+0

मै मैट के साथ सहमत हूं, यह एक अच्छी तरह से सचित्र प्रश्न है और उद्देश्य पानी के रूप में स्पष्ट है। यह गैर देशी अंग्रेजी बोलने वालों के लिए बहुत मदद करता है। =) –

उत्तर

4

आप एक मामला बयान के साथ ऐसा करने के लिए होगा।

+0

मुझे लगता है कि आप – houlgap

+0

@houlgap खंड द्वारा चयन और समूह से मान हटाने की जरूरत: यही कारण है कि मैं तीसरी बार यकीन है कि मैं सवाल समझ बनाने के लिए के लिए सवाल पुन: पढ़ने के बाद देखा है। हालांकि मुझे बताने के लिए धन्यवाद, यह अच्छा है! =) –

+0

@Ephismen: क्या यह आपके प्रश्न का सही उत्तर देता है? क्या मैं आपकी ज़रूरत को सही ढंग से समझता हूं, या मुझे कुछ याद आती है? –

2

इस जैसे कॉलम के साथ अपने एसक्यूएल पुनर्लेखन:

sum(case when answer=0 then values else 0 end) negative

1

Ephismen,

उदाहरण आप दे उस में एक छिपे हुए समस्या है। क्या आपके पास हमेशा कम से कम एक सकारात्मक और एक नकारात्मक होगा? आप क्या करना चाहते हैं यदि आपके पास केवल एक या दूसरा है और दोनों नहीं। तालिका में शामिल होने से आप काम नहीं करेंगे जब आपके पास प्रत्येक आईडी और नाम के लिए कई पंक्तियां होंगी।

एक दो अलग-अलग क्वेरी के मिलन अगर यह एसक्यूएल सर्वर के लिए लागू होता है इन सवालों का जवाब करने में सक्षम है, लेकिन यकीन है कि नहीं होगा 2008

आप इस प्रकार एसक्यूएल के लिए खंड द्वारा समूह का उपयोग करके इस लक्ष्य को हासिल करने के लिए सक्षम हो सकता है :

select id 
    , name 
    , sum (neg_values) as negative 
    , sum (pos_values) as positive 
    from         -- temporary table 
    (select id 
      , name 
      , sum (values) as neg_values 
      , 0   as pos_values -- placeholder 
     from mytable 
     where answer = 0     -- negative 
     group by id 
       , name 
     union all 
     select id 
      , name 
      , 0   as neg_values -- placeholder 
      , sum (values) as pos_values 
     from mytable 
     where answer = 1     -- positive 
     group by id 
       , name 
    ) 
    group by id 
     , name 

अस्थायी तालिका (भीतरी संघ के साथ चयन) समान पंक्तियों वापस आ जाएगी यह करने के लिए:

id name neg_value pos_value 
25 tom  3000   0 
25 tom   0  800 
27 jerry  2100   0 
27 jerry  0  80 

अंतिम चयन अपने वांछित resu वापस आ जाएगी lts (उन्हें एक साथ संक्षेप में)।

+0

मेरे मामले में हमेशा दोनों रहेगा इसलिए मुझे इसके बारे में चिंता करने की ज़रूरत नहीं है, लेकिन आपने जो बताया है वह सच है। यदि आप एक दिन इस समस्या का सामना करते हैं तो मैं आपको जवाब दूंगा, और मैं इसे +1 कर दूंगा क्योंकि इससे दूसरों की मदद मिल सकती है। – Aymeric

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