تحدث فرقا بين نتيجتين

أحتاج إلى إحداث فرق بين نتائج هذه الاستعلامات 2.

SELECT SUM(overwritten_ecl+ overwritten_ecl_off) A1
FROM llpa.h_rt_ifrs_provision
WHERE calculation_id = 1624
AND stage = 1
AND id_rip_code = 'HOPISD'
AND actual_urg = '0.5'

و هذه

SELECT SUM(overwritten_ecl+ overwritten_ecl_off) A2
FROM llpa.h_rt_ifrs_provision
WHERE calculation_id = 1652
AND stage = 1
AND id_rip_code = 'HOPISD'
AND actual_urg = '0.5'

نتيجة الاستعلام الأول: 123456 و نتيجة الاستعلام الثاني: 2345678. ما أحتاج القيام به هو الفرق البسيط بين 123456 - 2345678. كيف يمكنني القيام بذلك مع استعلام واحد؟ حاولت مشغل MINUS ، لكنه لم ينجح. أنا أستخدم ORACLE SQL.

0

2 إجابة

استخدم تعبير case للقيام بالتجميع المشروط. قيم موجبة SUM لقيم 1624 ، والقيم السالبة لمعرف 1652.

SELECT SUM(case calculation_id
             when 1624 then  overwritten_ecl + overwritten_ecl_off
             when 1652 then -overwritten_ecl - overwritten_ecl_off
             else 0
           end)
FROM llpa.h_rt_ifrs_provision
WHERE calculation_id IN (1624, 1652)
AND stage = 1
AND id_rip_code = 'HOPISD'
AND actual_urg = '0.5'

في الأساس نفس الجواب باسم Radim ، مع استثناء أنني أبقت شرط calculation_id في المادة WHERE . قد تسرع الامور.

0
وأضاف
وهي تعمل مثل سحر :) شكرا لك
وأضاف المؤلف Marin, مصدر

استخدم التجميع الشرطي

SELECT SUM(CASE WHEN calculation_id = 1624 THEN overwritten_ecl+ overwritten_ecl_off ELSE 0 END)  - 
       SUM(CASE WHEN calculation_id = 1652 THEN overwritten_ecl+ overwritten_ecl_off ELSE 0 END)  diference
FROM llpa.h_rt_ifrs_provision
WHERE stage = 1
    AND id_rip_code = 'HOPISD'
    AND actual_urg = '0.5'
0
وأضاف
المنطق صحيح ، لكنه يرمي خطأ في بناء الجملة. شكرا لك على ملاحظاتك
وأضاف المؤلف Marin, مصدر