मेरे पास इस तरह की एक टेबल है

ORG_ID  TYPE  VALUE
1        A     20
1        B     30
1        C     10
2        B     60

अब मैं प्रत्येक org_id के लिए इस तालिका से मानों का चयन करना चाहता हूं, टाइप करें लेकिन टाइप ए के लिए मैं ए टाइप करने के लिए उसी org_id के प्रकार बी का मान जोड़ना चाहता हूं। मेरी क्वेरी इसे वापस करनी चाहिए

VALUE
50
30
10
60

इस मामले में, जब ORG_ID 1 है और TYPE 'A' है, तो मुझे उस संगठन का प्रकार B मान जोड़ना होगा, जो कि 30 है। लेकिन मुझे अंतिम मान जोड़ने की आवश्यकता नहीं है क्योंकि वह किसी अन्य संगठन से संबंधित है

1
Sanguis 23 सितंबर 2020, 15:22

2 जवाब

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

आप विंडो फ़ंक्शंस का उपयोग कर सकते हैं:

select t.*,
    case when type = 'A'
        then value + max(case when type = 'B' then value else 0 end) over(partition by org_id) 
        else value 
    end as new_value
from mytable t

DB Fiddle पर डेमो:

ORG_ID | TYPE | VALUE | NEW_VALUE
-----: | :--- | ----: | --------:
     1 | A    |    20 |        50
     1 | B    |    30 |        30
     1 | C    |    10 |        10
     2 | B    |    60 |        60
2
GMB 23 सितंबर 2020, 15:31

एक लेफ्ट जॉइन को काम करना चाहिए:

SELECT    a.id, a.type, a.value + COALESCE(b.value, 0)
FROM      mytable a
LEFT JOIN mytable b ON a.type = 'A' AND b.type = 'B' AND a.org_id = b.org_id
1
Mureinik 24 सितंबर 2020, 11:20