मेरे पास एक सारणी है जो इस तरह दिखती है:

lob|desc|cnt
dogs,declined,5
cats,declined,5
rats,declined,8
dogs,failed,2

मैं एक नई तालिका बनाने की कोशिश कर रहा हूं जो इस तरह दिखती है:

lob|cnt|failed_cnt
dogs,5,2
cats,5,0
rats,8,0

अनिवार्य रूप से, मैं एलओबी कॉलम द्वारा परिणामों को एक साथ मिला रहा हूं, इसलिए कोई डुप्लिकेट रिकॉर्ड नहीं है। LOB मान जो स्तंभ मान को घटाते हैं, विफल हो जाते हैं, उन्हें एक साथ मर्ज करें और उस cnt को लें और इसे नए कॉलम ""fail_cnt" में डालें। अगर यह समझ में आता है।

मैंने कुछ एसक्यूएल कोड लिखा है जो शून्य मान रखता है लेकिन अभी भी डुप्लीकेट हैं। यहाँ मेरा आउटपुट है:

 lob|cnt|failed_cnt
  dogs,5,0
  cats,5,0
  rats,8,0
  dogs 0,2

यहाँ मेरा कोड है:

SELECT 
    lob,
    CASE 
        WHEN CNT <> 0 AND desc not like 'Failed%' 
            THEN CNT
            ELSE 0
    END AS CNT,
    CASE  
        WHEN CNT <> 0 AND desc LIKE 'Failed%' 
            THEN CNT
            ELSE 0
    END AS FAILED_CNT
FROM 
    table1

कोई विचार या सुझाव?

-1
mali_the 2 सितंबर 2021, 22:28
1
युक्ति: उचित इंडेंटेशन SQL को पढ़ने और लिखने में इतना आसान बनाता है!
 – 
jarlh
2 सितंबर 2021, 22:29

1 उत्तर

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

एकत्रीकरण का प्रयोग करें:

select lob,
       sum(case when descr = 'declined' then cnt else 0 end) as declined,
       sum(case when descr = 'failed' then cnt else 0 end) as failed
from t
group by lob;
3
Gordon Linoff 2 सितंबर 2021, 22:29