2013-06-10 16 views
7

Mam dwie tabele o nazwach Tabela-A i Tabela-B. Proszę zapoznać się z podanymi tabelami. Chcę dołączyć do nich po pobraniu agregatu z kolumny "Wartość" w obu tabelach. Na przykład;Łączenie tabel z wartością zagregowaną

 Name Value1 
     ABC  10 
     ABC  18 
     ABC  12 
     DEF  5 
     XYZ  15 
     XYZ  16 

TABELA B A TABELA-

 Name Value2 
     ABC  15 
     ABC  5 
     XYZ  9 

Moje oczekiwany wynik jest

Wynik

 Name Value1 Value2 
     ABC  40  20 
     DEF  5  0 
     XYZ  31  9 

Mam nadzieję, że rozumiesz moje pytanie. Każda pomoc zostanie doceniona.

Odpowiedz

6

Spróbuj ten -

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 
+0

tęskniłeś klauzuli GroupBy i wyraźne. W każdym razie nie zadziała w mojej sprawie. Czy możesz przetestować próbkę? –

+0

Tak, mam to. Dzięki. Ale czy istnieje jakakolwiek możliwość z tylko instrukcjami złączenia. Mam na myśli, bez używania tabel tymczasowych. –

+0

Tak, działa dobrze. Dzięki. –

1
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 
+1

+1 za dobrą odpowiedź. ale proszę zamienić w zapytaniu 'JOIN' na' LEFT JOIN'. – Devart

1
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 
+0

Czy możesz mi powiedzieć, dlaczego upuściłeś te stoły? W każdym razie to działa i dziękuję. –

+0

miałem następujący kod przed: create table #A ( \t Nazwa nvarchar (255) \t, wartość int ) create table #B ( \t Nazwa nvarchar (255) \t, wartość int ) wkładka do #A wybierz 'abc', 10 związek wszystkie wybierz 'abc', 18 związek wszystkie wybierz 'abc', 12 związek wszystkie wybrać 'DEF', 5 wkładka Int o #B wybierz "ABC", 15 zjednoczenie wszystkie wybierz "ABC", 5 zjednoczenie wszystkie wybierz "XYZ", 12 –

+0

Devart & Pavel: Powinno być pełne sprzężenie zewnętrzne, a nie lewe złącze: ponieważ jeśli zmienisz dane w tabela stracisz dane, a isnull lub koalesce powinny być stosowane do a.name i b.name –

Powiązane problemy