मेरे पास मेरी क्वेरी में कोड का हिस्सा है, जिसमें मामला है, और मैं इसे COALESCE में फिर से लिखना चाहता हूं

यहाँ कोड का मूल भाग है

CASE WHEN u.ClientCharges IS NULL THEN 0 ELSE u.ClientCharges END -
                            CASE WHEN LAGClientCharges IS NULL THEN 0
                            ELSE LAGClientCharges
                            END AS my_Delta,

    CASE WHEN (CASE WHEN u.ClientCharges IS NULL THEN 0 ELSE u.ClientCharges END - CASE WHEN LAGClientCharges IS NULL THEN 0
                            ELSE LAGClientCharges END) > 0 THEN 'Gain'
         WHEN CASE WHEN u.ClientCharges IS NULL THEN 0 ELSE u.ClientCharges END - CASE WHEN LAGClientCharges IS NULL THEN 0
                            ELSE LAGClientCharges END < 0 THEN 'Loss'
                            ELSE NULL END AS GainsLosses,
    CASE WHEN u.ClientCharges >=0 AND LAGClientCharges IS NULL AND t.MonthBilled <> '2015-01-01' THEN 'New' ELSE 'Existing' END AS ClientType,

    CASE WHEN u.ClientCharges IS NULL THEN 'InActive' ELSE 'Active' END AS ActiveStatus,

    CASE WHEN LAGClientCharges IS NOT NULL AND t.MonthBilled <> '2015-01-01' THEN 1 ELSE NULL END AS ActiveLastMonth,

    CASE WHEN u.ClientCharges IS NULL AND (LAGClientCharges <> 0 AND LAGClientCharges IS NOT NULL) AND t.MonthBilled <> '1/1/2015' THEN 1 ELSE NULL END AS OneMonthChurn,

    u2.FeatureKeyCount,

    CASE WHEN u.ClientCharges IS NOT NULL AND u.ClientCharges > 0 THEN 1 ELSE 0 END AS OrgCounter

यहाँ एक हिस्सा है, जहाँ मैं कुछ CASE कथनों को फिर से लिखता हूँ

    COALESCE(u.ClientCharges, 0) - COALESCE(LAGClientCharges, 0) AS my_Delta,

    CASE WHEN (COALESCE(u.ClientCharges , 0) - COALESCE(LAGClientCharges , 0)) > 0 THEN 'Gain'
         WHEN COALESCE (u.ClientCharges , 0) - COALESCE(LAGClientCharges , 0) < 0 THEN 'Loss'
                            ELSE NULL END AS GainsLosses,
    CASE WHEN u.ClientCharges >=0 AND LAGClientCharges IS NULL AND t.MonthBilled <> '2015-01-01' THEN 'New' ELSE 'Existing' END AS ClientType,

   COALESCE (u.ClientCharges, 'InActive') AS ActiveStatus,

    CASE WHEN LAGClientCharges IS NOT NULL AND t.MonthBilled <> '2015-01-01' THEN 1 ELSE NULL END AS ActiveLastMonth,

    CASE WHEN u.ClientCharges IS NULL AND (LAGClientCharges <> 0 AND LAGClientCharges IS NOT NULL) AND t.MonthBilled <> '2015-01-01' THEN 1 ELSE NULL END AS OneMonthChurn,

    u2.FeatureKeyCount,

    CASE WHEN u.ClientCharges IS NOT NULL AND u.ClientCharges > 0 THEN 1 ELSE 0 END AS OrgCounter

लेकिन मैं और के साथ पंक्तियों को फिर से कैसे लिख सकता हूं, या हो सकता है कि इसका कुछ बेहतर संस्करण हो, इसे फिर से कैसे लिखा जाए?

0
Eugene Sukh 22 अक्टूबर 2018, 11:03

1 उत्तर

सबसे बढ़िया उत्तर

प्रश्न यह प्रतीत होता है कि आप उस मामले के तर्क को फिर से लिखने के लिए संघर्ष कर रहे हैं जिसमें AND शामिल है

CASE WHEN u.ClientCharges IS NOT NULL AND u.ClientCharges > 0 THEN 1 ELSE 0 END AS OrgCounter

यह बहस का विषय है कि क्या यह पाठक के लिए स्पष्ट है, लेकिन आप इन पंक्तियों के साथ तर्क मांग रहे हैं:

CASE WHEN coalesce(u.ClientCharges,0) > 0 THEN 1 ELSE 0 END AS OrgCounter

यह तब काम करता है जब AND के खंड एक ही फ़ील्ड का उपयोग कर रहे हों, लेकिन जहाँ आप कई अलग-अलग फ़ील्ड की जाँच कर रहे हैं, आपको उन्हें वैसे ही छोड़ना होगा जैसे वे हैं।

कोड के इस टुकड़े के भीतर डेटा की बहुत सारी व्याख्या चल रही है - असल में व्यावसायिक तर्क SQL में एम्बेड किया जा रहा है - आप उस पर पुनर्विचार करना चाह सकते हैं।

2
Andrew 22 अक्टूबर 2018, 08:07