2016-05-30 108 views
-2

我有兩個表:SQL:將兩個SQL查詢

T_CHAMBRE_CHB (CHB_NUM); 

T_PLANNING_PLN (PLN_JOUR ,CHB_NUM, PLN_LIBRE); 

我在裏面有這些值:

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 

我想獲得房間occpation對信息的13維耶2000,如果一個房間是不是在說的意思是它是免費的規劃(此處爲3),所以結果應該是:

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

我有這個疑問:

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); 

我得到這樣的結果:

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

我不知道爲什麼我得到的第三行(3 ---->假)

我想我笑使用OUTER UNION但SQL Server不喜歡語法。

+2

無需'選擇DISTINCT'當'UNION'時,因爲'UNION'會刪除重複的行。 (子查詢) – jarlh

回答

1

下面的查詢可能會給所要的結果: -

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 

輸出: -

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

所以沒有辦法沒有tsql,只是pur sql? – unfoudev

+1

'選擇TCC.CHB_NUM,COALESCE(TPP.PLN_JOUR, '2000年1月13日')PLN_JOUR,COALESCE(TPP.PLN_LIBRE, '真')從T_CHAMBRE_CHB TCC PLN_LIBRE LEFT OUTER JOIN T_PLANNING_PLN TPP ON TCC.CHB_NUM = TPP.CHB_NUM WHERE TPP.PLN_JOUR ='2000-01-13'或TPP.PLN_JOUR爲NULL;'?! – Michael

1

如果我理解你的問題,你必須使用左連接。

請使用以下查詢可能是它可以幫助你

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

謝謝,但我沒有得到3 - > False – unfoudev

+0

你得到3爲null,你必須將null替換爲false .. –

+0

我已經更新了我的安塞現在使用.. –