2016-09-27 15 views
0

Guten Abend mit,zwei Tabellen in einer Tabelle SQL

Ich habe ein Problem versucht, eine Lösung zu finden, zwei Tabellen zu verknüpfen:

Zum Beispiel habe ich

Tabelle 1:

Date | Item 
12/03 | aaaa 
12/03 | aaaa 
14/03 | bbbb 
14/03 | aaaa 
15/03 | cccc 

Tabelle 2:

Date | Item2 
11/03 | aaaa 
12/03 | aaaa 
13/03 | bbbb 
14/03 | aaaa 
15/03 | cccc 

Ich möchte eine Zählung zu tun haben diese

Date | Count(Item1) | Count(Item2) 
11/03 | 0   | 1 
12/03 | 2   | 1 
13/03 | 0   | 1 
14/03 | 2   | 1 
15/03 | 1   | 1 

ich so weit so versucht haben, aber es scheint nicht zu funktionieren, es gibt mir nur die commun Termine:

SELECT F.DATE, COUNT(T1.Item1), COUNT(T2.Item2) FROM TABLE1 
T1 LEFT JOIN TABLE2 T2 ON T1.date=T2.date 

Date | Count(Item1) | Count(Item2) 
12/03 | 2   | 1 
14/03 | 2   | 1 
15/03 | 1   | 1 

Jede Hilfe ?

Dank

+1

benötigen Sie auch eine 'group by'-Klausel. –

+0

@MarcB Können wir zwei Gruppen haben? – ben

+0

nein, nur eine 'group by'-Anweisung, aber es kann mehrere Felder/Werte haben, auf die gruppiert werden soll. 'Gruppe nach Gruppe 'ist falsch,' Gruppe nach A, B 'ist korrekt. Sie müssen nur nach dem Datum gruppieren. –

Antwort

3
In the below SQL, the first inline view is computing all the counts at date level and same applies with second query. By combining the results of left join and right join between these two inline views we can combine all the common and uncommon results from both tables as you described. 


     SELECT Date, 
       Item1, 
       Item2 
      FROM 
      ( 
       SELECT T1.Date AS Date, 
         COUNT( T1.Item ) AS Item1,      
         COUNT( T2.Item ) AS Item2 
        FROM Table1 t1 
       LEFT JOIN 
         Table2 t2 
        ON t1.date = t2.date 
       GROUP BY t1.Date    
      UNION    
       SELECT T2.Date AS Date, 
         COUNT(T1.Item) AS Item1, 
         COUNT(T2.Item) AS Item2 
        FROM Table2 t2 
       LEFT JOIN 
         Table1 t1 
        ON t2.date = t1.date 
       GROUP BY t2.Date 
      ) A 
     ORDER BY Date   
     ; 

SQL Fiddle Implementierung: -

http://sqlfiddle.com/#!9/5b872/14

+0

Es funktioniert nicht, da beide Spalten Datum genannt werden. Wenn ich X.date wähle, habe ich nur Daten in X. – ben

+0

Spalte 'Datum' in Feldliste ist mehrdeutig – ben

+0

Jetzt versuchen ... Ich habe den Alias ​​ – Teja

0

Ich denke, das ist das, was Sie brauchen - Sie Gruppe jede Tabelle am Tag eine Zählung mit und fügen Sie dann Werte aus beiden gruppierten Tabellen:

DECLARE @tab1 TABLE 
(
    [Date] VARCHAR(5), 
    Item1 VARCHAR(100) 
) 

DECLARE @tab2 TABLE 
(
    [Date] VARCHAR(5), 
    Item2 VARCHAR(100) 
) 

INSERT INTO @tab1 (Date, Item1) VALUES 
('12/03','aaaa'), 
('12/03','aaaa'), 
('14/03','bbbb'), 
('14/03','aaaa'), 
('15/03','cccc') 

INSERT INTO @tab2 (Date, Item2) VALUES 
('11/03','aaaa'), 
('12/03','aaaa'), 
('13/03','bbbb'), 
('14/03','aaaa'), 
('15/03','cccc') 


;WITH grp AS (
SELECT [Date],COUNT(*) AS Item1, 0 AS Item2 FROM @tab1 
GROUP BY [Date] 

UNION 

SELECT [Date],0, COUNT(*) FROM @tab2 
GROUP BY [Date]) 

SELECT grp.Date, SUM(grp.Item1) AS [CountItem1], SUM(grp.Item2) AS [CountItem2] FROM grp 
GROUP BY grp.Date