Reputation: 3327
I've two tables, named Table-A and Table-B. Please refer given tables . I want to join these after taking the aggregate of 'Value' column in both tables. For eg;
TABLE-A
Name Value1
ABC 10
ABC 18
ABC 12
DEF 5
XYZ 15
XYZ 16
TABLE-B
Name Value2
ABC 15
ABC 5
XYZ 9
My expected result is,
Result
Name Value1 Value2
ABC 40 20
DEF 5 0
XYZ 31 9
Hope you understand my question. Any help will be appreciated.
Upvotes: 10
Views: 13403
Reputation: 1647
SELECT [TAB-A].NAME, VALUE1, VALUE2 FROM
(SELECT NAME, SUM(VALUE1) VALUE1 FROM [TABLE-A] GROUP BY NAME) [TAB-A] LEFT JOIN
(SELECT NAME, SUM(VALUE2) VALUE2 FROM [TABLE-B] GROUP BY NAME) [TAB-B]
ON [TAB-A].NAME = [TAB-B].NAME
Upvotes: 1
Reputation: 121902
Try this one -
SELECT
a.Name
, Value1 = ISNULL(Value1, 0)
, Value2 = ISNULL(Value2, 0)
FROM (
SELECT
Name
, Value1 = SUM(Value1)
FROM dbo.[TABLE-A]
GROUP BY Name
) a
LEFT JOIN (
SELECT
Name
, Value2 = SUM(Value2)
FROM dbo.[TABLE-B]
GROUP BY Name
) b ON a.Name = b.Name
Upvotes: 11
Reputation: 92
SELECT
COALESCE(A.Name, B.Name)
, (CASE WHEN A.value IS NULL THEN 0 ELSE A.value END) AS Value1
, (CASE WHEN B.value IS NULL THEN 0 ELSE B.value END) AS Value2
FROM (
SELECT Name, SUM(Value) AS Value
FROM #A GROUP BY Name
) AS A
FULL JOIN (
SELECT Name, SUM(Value) AS Value
FROM #B GROUP BY Name
) AS B ON A.Name = B.Name
DROP TABLE #A
DROP TABLE #B
Upvotes: 1