2015-07-20 84 views
1

我對SQL比較陌生,所以請溫和!我有一個表格按月保存特定結構元素的狀態列表。這隻保存狀態已被改變(例如同意)的記錄,所以我缺少什麼時候根本沒有開始的信息(由於表中沒有任何操作,所以不存在於表中)。基本上我想加入到另一個包含日期的表中,這樣如果沒有記錄,它會填充空白狀態。用空白填充連接表SQL

例如表A持有的狀態

Cycle ID .... Status 
69082 ............2 
80412 ............3 

表B持有的日期

Cycle ID..... Date 
69082 ..........October 2013 
75520 ..........November 2013 
80045 ..........December 2013 
80412 ..........January 2014 

所以輸出我想會是這樣的(所以從表B的一切記錄,在表A中不存在的空白狀態):

Cycle ID .... Date .... Status 
69082 ........Oct 13.....2 
75520 ........Nov13.....' ' 
80045 ........Dec13 ....' ' 
80412 ........Jan14 .....3 

任何幫助很多ap謹慎,謝謝。

回答

0

我覺得右連接表一會給你那些列

+0

我已經嘗試了正確的連接,左連接(他們基本上都是!),它只是返回兩個記錄都有的記錄。 – missspeedy

+0

好吧,你是否嘗試使用內部連接並在select中添加TableA.status? – lloydom

+0

這是我想要使用的確切代碼: 選擇 a.BUDGET_STATE_HISTORY_ID作爲ID, b.vis_id, a.STRUCTURE_ELEMENT_ID, a.PREVIOUS_STATE, a.NEW_STATE, a.CHANGED_TIME FROM BUDGET_STATE_HISTORY a RIGHT JOIN BUDGET_CYCLE b on b.budget_cycle_id = a.budget_cycle_id 其中b.model_ID ='1'和a.structure_element_id ='1057' – missspeedy

0

您可以使用案例then-else語句

Select 
    tb.cycleid , 
    tb.date , 
    Case 
    When tb.status is Null Then '' 
    Else tb.status /* cast to string! */ 
    End as status 
From tableB tb left outer join tableA ta on ta.cycleid=tb.cycleid 

根據您的數據庫必須轉換爲字符串的狀態值。例如,在sql server中,您可以使用CAST(tb.status as varchar(3))而不是Else部分。

查看連接子句。上述查詢將獲得所有具有date的週期。如果表B中沒有數字(沒有日期),它不會出現在結果中。也許你需要使用distinct,因爲不要重複多個日期的循環。