2016-10-12 1 views
1

Ich habe zwei Tabellen, und ich kommen sie zusammen auf der Datumsspalte. Das funktioniert gut, wenn ein Tisch das Datum nicht enthält.Daten Joining, wenn eine Tabelle Nullwert hat

D.h., in der Tabelle zwei, ich weiß nicht 2016.10.10 haben. Ich würde diese Linie immer noch gerne im Ergebnis sehen, da dies ein Tag ist, an dem ich zeigen möchte, dass es keine Aktivität gab. Diese

ist für eine Bar: Ich habe einen Tisch, an dem sie die Zählung auf dem Bierhahn zu registrieren, und derjenige, der den Überblick über verkaufte diejenigen hält.

Wenn sie einen Tag geschlossen sind, sie verkaufen eigentlich nichts, aber sie wollen immer noch das Personal, die Anzahl der gezapfte Biere zu registrieren, nur für den Fall.

Die Daten aus 2016.10.10 so etwas wie dieses dann würde:

Tabelle 1 (Umsatz, nicht 10.10 öffnen = keine Daten gespeichert haupt)

Date Sold 10.08 22 10.09 31 10.11 54

Tabelle 2 (Gewinde-, sie zählen jeden Tag = haben Daten 10,10)

Date Tapped 10.08 23 10.09 31 10.10 0 10.11 54

ich das Ergebnis es zeigen möchten wie folgt aus:

Date Tapped Sold Diff 10.08 23 22 1 10.09 31 31 0 10.10 0 0 0 10.11 54 54 0

Aber ich kann das nicht an der Arbeit, denn wenn ich in der Tabelle zwei anschließen, kann es nicht die „verkauft“ und „abgehört“ werden diejenigen von 10.10 verbinden, da ich habe nicht einen Weg Mach sie.

Gibt es eine Möglichkeit, dies zu tun?

+0

Bitte zeigen Sie die Abfrage, die Sie versucht haben. Tipp: linker/rechter äußerer Join hilft – Jens

Antwort

0

Verwenden Sie eine oder right join.

Below Beispiel zeigt, wie RIGHT JOIN verwenden.

SELECT t2.Date,t2.Tapped,ISNULL(t1.sold,0) sold,t2.Tapped-ISNULL(t1.sold,0) as Diff 
FROM Table1 t1 
RIGHT JOIN Table2 t2 
    ON t1.Date=t2.Date 
+0

Gut, danke - das scheint gut zu funktionieren! –

+0

Könnte jetzt hier ein bisschen schnell gewesen sein. Ich bekomme jetzt keine Daten von der verkauften Spalte. –

+0

Datum \t angezapft \t verkauft \t diff 2016-10-10 00:00:00 0,000 \t 10,000 2016-10-11 00:00:00 0,000 \t 11,000 2016-10-12 00: 00:00 0,000 \t 19,000 2016-10-13 00:00:00 0,000 \t 0,000 2016-10-14 00:00:00 0,000 \t 15,000 –

1
CREATE TABLE #A 
(
DATE NUMERIC 
(22,6),SOLD INT 
) 
INSERT INTO #A VALUES 
(10.08,22), 
(10.09,31), 
(10.11,54) 

CREATE TABLE #B 
(
DATE NUMERIC 
(22,6),TAPPED INT 
) 

INSERT INTO #B VALUES    
(10.08,23), 
(10.09,31), 
(10.10,0), 
(10.11,54) 

SELECT A.DATE,A.TAPPED,ISNULL(B.SOLD,0)SOLD,A.TAPPED-ISNULL(B.SOLD,0) AS DIFFRENCE 
FROM #B A LEFT JOIN #A B ON A.DATE=B.DATE 
+0

Danke, ich habe zuerst eine andere Lösung ausprobiert, und es hat funktioniert. Diese Lösung - erstellt sie nicht tatsächlich eine neue permanente Tabelle und füllt sie? –

0

einfache Aussage

SELECT tapped.date as date, IFNULL(tapped.tapped,0) as tapped, IFNULL(sales.sold,0) as sold, IFNULL(tapped.tapped - sales.sold,0) as diff 
FROM 
tapped 
LEFT OUTER JOIN sales ON sales.date = tapped.date 
ORDER BY 
tapped.date ASC 
Verwandte Themen