2016-05-30 14 views
-2

Ich habe zwei Tabellen:SQL: Kombinieren von zwei SQL-Abfragen

T_CHAMBRE_CHB (CHB_NUM); 

T_PLANNING_PLN (PLN_JOUR ,CHB_NUM, PLN_LIBRE); 

Ich habe diese Werte in es:

T_CHAMBRE_CHB:

1 
2 
3 
4 

T_PLANNIG_CHB:

1 2000-01-12 1 False 
2 2000-01-12 2 False 
3 2000-01-13 1 False 
4 2000-01-13 2 False 
5 2000-01-13 4 True 

Ich möchte die Zimmerbesprechung bekommen die 13 janvier 2000 für Informationen, wenn ein Raum ist in der Planung nicht (hier 3), die es frei bedeuten, so sollte das Ergebnis sein:

CHB_NUM  PLN_LIBRE 
----------- --------- 
1   False 
2   False 
3   True 
4   True 

Ich habe diese Anfrage:

SELECT DISTINCT TCC.CHB_NUM, TPP.PLN_LIBRE 
FROM T_CHAMBRE_CHB AS TCC, 
    T_PLANNING_PLN AS TPP 
WHERE TCC.CHB_NUM=TPP.CHB_NUM AND TPP.PLN_JOUR = '2000-01-13' 
UNION 
SELECT DISTINCT TCC.CHB_NUM, TPP.PLN_LIBRE 
FROM T_CHAMBRE_CHB AS TCC, 
    T_PLANNING_PLN AS TPP 
WHERE TCC.CHB_NUM NOT IN (SELECT DISTINCT (TPP2.CHB_NUM) FROM T_PLANNING_PLN AS TPP2); 

ich dieses Ergebnis:

1 1 False 
2 2 False 
3 3 False 
4 3 True 
5 4 True 

ich weiß nicht, warum ich die dritte Zeile (3 ----> false)

ich glaube, ich sho Verwenden Sie eine OUTER UNION, aber SQL Server mag die Syntax nicht.

+2

Keine Notwendigkeit für SELECT DISTINCT 'wenn 'UNION', da 'UNION' doppelte Zeilen entfernt. Keine Notwendigkeit für "SELECT DISTINCT" wenn "[NOT] IN" (Unterabfrage.) – jarlh

Antwort

1

Below Abfrage hilft vielleicht das gewünschte Ergebnis geben: -

declare @date as date='2000-01-13' 

select distinct TCC.CHB_NUM,COALESCE(TPP.PLN_JOUR,@date) PLN_JOUR,COALESCE(TPP.PLN_LIBRE,'True') PLN_LIBRE  
from T_CHAMBRE_CHB TCC 
LEFT OUTER JOIN 
T_PLANNING_PLN TPP ON TCC.CHB_NUM=TPP.CHB_NUM 
WHERE [email protected] OR TPP.PLN_JOUR IS NULL 

Ausgang: -

CHB_NUM PLN_JOUR PLN_LIBRE 
    1  2000-01-13 False 
    2  2000-01-13 False 
    3  2000-01-13 True 
    4  2000-01-13 True 
+0

So gibt es keine Möglichkeit, es ohne tsql zu tun, nur pur sql? – unfoudev

+1

SELECT TCC.CHB_NUM koaleszieren (TPP.PLN_JOUR, '2000-01-13') PLN_JOUR koaleszieren (TPP.PLN_LIBRE, 'true') PLN_LIBRE von T_CHAMBRE_CHB TCC LEFT OUTER JOIN T_PLANNING_PLN TPP = ON TCC.CHB_NUM TPP.CHB_NUM WHERE TPP.PLN_JOUR = '2000-01-13' ODER TPP.PLN_JOUR IST NULL; '?! – Michael

1

Sie müssen links Join verwenden, wenn ich Ihre Frage verstehe.

Bitte verwenden Sie unter Abfrage sein kann Sie

SELECT T_CHAMBRE_CHB.CHB_NUM, ISNULL(T_PLANNIG_CHB.PLN_LIBRE, FALSE) 
FROM T_CHAMBRE_CHB 
LEFT JOIN T_PLANNIG_CHB ON (T_CHAMBRE_CHB.CHB_NUM = T_PLANNIG_CHB.CHB_NUM) 
WHERE T_PLANNIG_CHB.PLN_JOUR = '2000-01-13' 
+0

Danke, aber ich bekomme nicht die 3 -> Falsch – unfoudev

+0

Sie erhalten 3 als Null müssen Sie null als falsch ersetzen .. –

+0

Ich habe meine anser aktualisiert jetzt verwenden .. –