2015-09-30 7 views
5

मैं एक प्रश्न पूछना चाहता हूं जो रिकॉर्ड के लिए एक निश्चित अन्य मान सही है तो दो मान/कॉलम का उपयोग करता है।दो कॉलम की तुलना में केस का चयन करें

मैं एक रिपोर्ट खाता जोत प्राप्त करने के लिए कोशिश कर रहा हूँ। दुर्भाग्य से डीबी आमतौर पर HoldingQty नामक कॉलम में कैश का मूल्य संग्रहीत करता है, जबकि हर दूसरे प्रकार के होल्डिंग (स्टॉक, बॉन्ड, म्यूचुअल फंड) के लिए यह Qty नामक कॉलम में संग्रहीत करता है।

समस्या यह है कि कभी-कभी नकद का मूल्य केवल Qty में संग्रहीत होता है, और कभी-कभी यह Qty और HoldingQty दोनों में होता है। स्पष्ट रूप से कभी-कभी इसे ऊपर वर्णित अनुसार HoldingQty में संग्रहीत किया जाता है।

असल में मैं अपने चयन का बयान कहना चाहता हूं कि "अगर सुरक्षा नकदी है, तो दोनों क्यूटी देखें और क्यूटी धारण करें और मुझे जो भी अधिक हो, उसका मूल्य दें। अन्यथा, अगर सुरक्षा नकद नहीं है तो मुझे क्यूटी दें" ।

मैं टी-एसक्यूएल में इसे कैसे लिखूं? यहाँ मेरी प्रयास है:

SELECT 
    h.account_name, h.security_name, h.security_type, h.price, 
    (CASE: 
     WHEN security_type = 'cash' 
      THEN (WHEN h.qty > h.holdingqty 
        THEN h.qty 
        ELSE h.holdingqty) 
     ELSE qty) as quantity, 
    h.total_value 
FROM 
    holdings h 
WHERE 
    ........... 
+0

आप वाक्य रचना के अलावा लगभग देखते हैं। –

+2

एक यौगिक मामले बयान 'केस का उपयोग करें जब SECURITY_TYPE = 'नकद' और h.qty <= h.holdingqty तो h.holdingqty quantity' रूप में किसी और h.qty अंत इस मूल रूप से कहते हैं जब प्रकार नकदी है और holdingqty है> या इसके बराबर qty उपयोग होल्डक्टी, अन्यथा qty का उपयोग करें। चूंकि हम जानते हैं कि यह नकद नहीं है, हम हमेशा qty का उपयोग करते हैं, मैंने केस स्टेटमेंट को सरल बनाने के लिए थोड़ा सा ऑर्डर बदल दिया। – xQbert

+2

सावधान रहें कि क्या ये कॉलम शून्य हैं। – shawnt00

उत्तर

4

आपकी क्वेरी सही है लेकिन कुछ वाक्य रचना व्यवस्था की जरूरत है, कोड

SELECT h.account_name, h.security_name, h.security_type, h.price, 
    CASE WHEN security_type = 'cash' then 
            CASE when h.qty > h.holdingqty then h.qty 
             else h.holdingqty END 
    ELSE qty END AS 'YourColumnName' 
) as quantity, h.total_value 
FROM holdings h 
where ........... 
+0

आपकी मदद के लिए धन्यवाद! –

2

लगभग हो गया है नीचे की कोशिश करो!

SELECT h.account_name , 
     h.security_name , 
    h.security_type , 
    h.price , 
    CASE WHEN security_type = 'cash' 
     THEN CASE WHEN h.qty > h.holdingqty THEN h.qty 
        ELSE h.holdingqty 
       END 
     ELSE qty 
    END AS quantity , 
    h.total_value 
FROM holdings h 
WHERE ........... 
+0

आपकी मदद के लिए धन्यवाद! –

2

आप एक नेस्टेड case अभिव्यक्ति के साथ इस व्यवहार को प्राप्त कर सकते हैं:

SELECT h.account_name, h.security_name, h.security_type, h.price, 
     CASE security_type 
     WHEN 'cash' THEN CASE WHEN h.qty > h.holdingqty THEN h.qty 
                 ELSE h.holdingqty 
         END 
     ELSE h.qty 
     END 
FROM holdings h 
WHERE ........... 
+0

आपकी मदद के लिए धन्यवाद! –

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