2012-04-13 24 views
1

Ich bin AnfängerZiehen Daten aus einer anderen Tabelle, wenn Daten, die sich in einer Tabelle nicht verfügbar ist

ich einen tabelle1 mit [Monat] müssen SQL [prognostizierten durchschnittl. Temperatur] als Spalten. Ich habe eine andere Tabelle2 mit [Monat], [tatsächlichen Durchschnitt. Temperatur] als Spalten. Für einige Daten sind in Tabelle 1 keine Datensätze verfügbar. In diesem Fall würde ich gerne Datensätze aus der Tabelle2 ziehen, wenn ich einen Datensatz in dieser Tabelle habe.

zum Beispiel Tabelle 1 möglicherweise Aufzeichnungen von April bis Dezember für ein Jahr sagen 2010. Tabelle 2 hat die Datensätze für Jan für 2010 Jahr zu dekrementieren. Ich würde gerne Datensätze aus Tabelle 2 für die Mising Jan, Feb, März Monate Datensätze in Tabelle 1 ziehen.

Irgendeine Idee. Wir verwenden SQL Server 2008

Vielen Dank im Voraus.

Antwort

2
select 
    [month], isnull([forecasted avg. temperature], [actual avg. temperature]) as temperature 
from 
    table2 left outer join table1 on table1.[month] = table2.[month] 

UPDATE pro Kommentar von Dems, änderte ich die Abfrage. Der ursprüngliche Beitrag macht es so, als ob table2 Daten für alle Monate enthält, also habe ich statt eines FULL JOINs nur so geschaltet, dass alle Datensätze aus table2 abgerufen werden und bei Verfügbarkeit zu table1 hinzugefügt werden, wobei ISNULL für die temp verwendet wird. Wenn Tabelle 2 nicht alle Daten enthält, ist ein FULL JOIN erforderlich.

+1

+0: Ein "JOIN" ist am nächsten zu dem, was ich denke, das OP gefragt (obwohl es ein bisschen mehrdeutig ist): Geben Sie Wert von T1 Wenn es existiert, gebe sonst den Wert von T2. Aber du brauchst einen 'FULL OUTER JOIN' * (Wenn es keine Zeile in T1 gibt, hat deine Antwort nichts, womit du T2 verbinden kannst) *. Dann müssten Sie ISNULL() für beide Felder verwenden. – MatBailie

+0

Das ist ein interessantes Stück Querdenken. Ich werde das in meine schlaue Plankiste legen. –

2
select [month], [forecasted avg. temperature] as temperature from table1 
union 
select [month], [actual avg. temperature] as temperature from table2 
+0

Wenn Monat in beiden Tabellen ist, werden verschiedene Temps beide herausziehen. –

+0

Beachten Sie, dass Szenario wurde nicht speziell erwähnt. –

+0

Wenn Monat in beiden Tabellen ist, werden verschiedene Temps beide ziehen. Das ist richtig. Nun, wenn es doppelte Werte von beiden Tabellen gibt, dann muss ich nur Temperaturwerte von Tabelle1 behalten – user1176058

0

Eine Möglichkeit ist, eine Vereinigung mit Abfrage Outer Join

Select [month], [forecasted avg. temperature] from Table1 
Union 
Select [month], [actual avg. temperature] From Table2 
outer join Table1 on Table1.[Month] = Table2.Month 
Where Table1.Month is null 

Aus der Spitze von meinem Kopf, und für Cthulu willen geben Sie Ihre Tabellen und Spalten Recht Namen.

Wenn Sie einen freundlicheren Namen auf eine Ausgabe wie etwas tun wollen

Select ForeCastAvgTemp As [forecasted avg. temperature] From Table1 
Verwandte Themen