sql server - आंतरिक में शामिल होने और समूह द्वारा




sql-server group-by (2)

मेरे पास समान परिभाषा के साथ दो टेबल हैं

T1:
Name VARCHAR(50)
Qty  INT

T2:
Name VARCHAR(50)
Qty  INT

यह प्रत्येक तालिका में मौजूद डेटा है:

T1:
Name   Qty
a   1
b   2
c   3
d   4

T2:
Name   Qty
a   1
b   3
e   5
f   10

मैं नतीजा करना चाहता हूं जो नाम के आधार पर दोनों तालिकाओं से मात्रा जोड़ सकता है I

अपेक्षित परिणाम:

Name    TotalQty
a             2
b             5
c             3
d             4
e             5
f            10

यदि वाम में शामिल हों या ठीक से जुड़ें, तो मुझे तालिकाओं में से किसी एक का नाम वापस नहीं करना है।

मैं क्या सोच रहा हूं कि एक अस्थायी तालिका बनाने और इन अभिलेखों को जोड़ना है और सिर्फ एक मील कॉलम पर कुल योग करना है लेकिन मुझे लगता है कि ऐसा करने का एक बेहतर तरीका होना चाहिए।

मेरी क्वेरी इस तरह दिखती है कि किस तरह से अपेक्षित परिणाम नहीं लौटाता है:

SELECT t1.Name, ISNULL(SUM(t1.Qty + t2.Qty),0) TotalQty
FROM t1
LEFT JOIN t2
ON t1.Name = T2.Name
GROUP BY t1.Name

क्या कोई मुझे बता सकता है कि टेम्पलेट टेबल बना रहा है ठीक है या फिर ऐसा करने का एक बेहतर तरीका है?


आप दोनों तालिकाओं को एक के रूप में चुनने के लिए UNION ALL का उपयोग कर सकते हैं, क्योंकि उनकी एक ही परिभाषा है वहां से, आप उन्हें एक व्युत्पन्न तालिका के रूप में घोंसला कर सकते हैं, और उसके बाद उस पर SUM :

SELECT [Name], SUM(Qty) AS TotalQty
FROM (
    SELECT [Name], Qty
    FROM t1
    UNION ALL
    SELECT [Name], Qty
    FROM t2
) YourDerivedTable
GROUP BY [Name]

आप पूर्ण बाहरी जुड़ने का उपयोग कर सकते हैं:

SELECT
    ISNULL(t1.Name, t2.Name) AS Name,
    ISNULL(t1.Qty, 0) + ISNULL(t2.Qty, 0) AS TotalQty
FROM t1
FULL JOIN t2 ON t1.Name = T2.Name

यह ऑनलाइन काम देखें: sqlfiddle







inner-join