2012-12-01 15 views
6

मुझे SQL क्वेरी के साथ समस्या है।
मैं TableA:विभिन्न तालिकाओं में रकम का योग

productA priceA 
P1  18 
P2  35 
P1  22 
P2  19 

और भी tableB:

productB priceB 
P1  3 
P2  15 
P1  80 
P2  96 

मैं चाहता हूँ के रूप में 2 टेबल से दो उत्पादों का योग होता है।

product price 
P1  123 
P2  165 

मैं दो तालिकाओं की रकम को जोड़ना चाहता हूं।
मैं इस क्वेरी को आजमा रहा हूं लेकिन यह गलत है।

SELECT productA, 
    (SELECT SUM(priceA) FROM tableA GROUP BY productA), 
    (SELECT SUM(priceB) FROM tableB GROUP BY productB) 
FROM tableA, tableB 
WHERE productA = productB 
GROUP BY productA 

कृपया मेरी मदद करें।

+0

क्या आप समझ सकते हैं कि "यह गलत है" से आपका क्या मतलब है - क्वेरी क्या उत्पन्न करती है? क्या 2 उप-चयन प्रत्येक व्यक्तिगत उत्पाद के लिए सही परिणाम लौटाते हैं? –

+0

आपका इंजन क्या है? – Sebas

उत्तर

3

आप एक union का उपयोग टेबल विलय करने के लिए कर सकता है, और परिणाम पर group by:

select product 
,  sum(price) 
from (
     select productA as product 
     ,  priceA as price 
     from TableA 
     union all 
     select productB 
     ,  priceB 
     from TableB 
     ) as SubQueryAlias 
group by 
     product 
+0

यह काम करता है! धन्यवाद! :) – vaka

+0

मैं आपको उकसा रहा हूं क्योंकि आपके पास 'संघ सब' है। –

1

यह काफी सचमुच रकम का योग है:

select 
    product, 
    sum(price) 
from (
    select productA as product, sum(priceA) as price from tableA group by 1 
    union all 
    select productB, sum(priceB) from tableB group by 1 
) 
group by 1 
+1

यह समाधान सही नहीं है क्योंकि 'संघ' डुप्लिकेट को हटा देता है। आपके पास 'यूनियन सब' होना चाहिए। –

+0

@ गॉर्डन लिनॉफ डॉन, आप सही हैं! मैं आमतौर पर 'यूनियन ऑल' के लिए नाज़ी हूं। इस पर ध्यान दिलाने के लिए धन्यवाद। (मैंने क्वेरी तय की है) – Bohemian

0

क्योंकि एक में शामिल होने के एक प्राकृतिक की तरह लगता है इस समस्या से संपर्क करने का तरीका, यहां union के बजाय join के साथ एक समाधान है। यह पहली बार सबक्वेरी में डेटा एकत्र करती है, तो परिणाम एक साथ जुड़:

select coalesce(a.productA, b.productB) as product, 
     coalesce(a.PriceA, 0) + coalesce(b.PriceB, 0) as price 
from (select productA, sum(PriceA) as PriceA 
     from TableA 
     group by productA 
    ) a full outer join 
    (select productB, sum(PriceB) as PriceB 
     from TableB 
     group by productB 
    ) b 
    on a.productA = b.prodctB 

मैं एक full outer join मामले में टेबल उत्पादों के विभिन्न समूहों है उपयोग कर रहा हूँ। नतीजतन, मुझे कथन में coalesce होना चाहिए।

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