2013-05-08 55 views
0

得到下面的表結構。SQL查詢 - 爲少數列添加空白數據

表1

ServiceID Activity_type  Start_date End_date 
1   Long Day Care  12/03/2012 12/03/2020 
1   Family Day Care  12/03/2012 12/03/2020 
2   Vacation Care  12/05/2012 12/03/2020 
2   Before School Care 12/05/2012 12/03/2020 
3   Long Day Care  12/09/2012 12/03/2020 
3   Vacation Care  12/09/2012 12/03/2020 
3   After School Care 12/09/2012 12/03/2020 

現在我想顯示空白Activity_type時服務沒有活動而得到的所有不同Activity_type如果服務沒有這樣的活動,則顯示與ServiceId , Start_date, End_Date記錄和一個空白Activity_type。我希望每個服務的總行數=不同的活動類型的總數。

輸出應該如下所示。每個服務有五行,不同活動類型的總計數是5。

ServiceID Activity_type  Start_date End_date 
1   Long Day Care  12/03/2012 12/03/2020 
1   Family Day Care  12/03/2012 12/03/2020 
1        12/03/2012 12/03/2020 
1        12/03/2012 12/03/2020 
1        12/03/2012 12/03/2020 
2   Vacation Care  12/05/2012 12/03/2020 
2   Before School Care 12/05/2012 12/03/2020 
2        12/05/2012 12/03/2020 
2        12/05/2012 12/03/2020 
2        12/05/2012 12/03/2020 
3   Long Day Care  12/09/2012 12/03/2020 
3   Vacation Care  12/09/2012 12/03/2020 
3   After School Care 12/09/2012 12/03/2020 
3        12/09/2012 12/03/2020 
3        12/09/2012 12/03/2020 

任何幫助?

回答

1

我敢肯定,它可以在一個更有效的方式進行,但最簡單的方法應該是讓ServiceIDActivity_Type之間的笛卡爾乘積得到所有組合,然後LEFT JOIN到數據表來獲取值實際上存在。

在TSQL中,這將是;

SELECT s.ServiceID, ISNULL(t.Activity_Type,'') Activity_Type, 
     s.Start_date, s.End_date 
FROM (SELECT DISTINCT ServiceID,Start_date, End_date FROM Table1) s 
JOIN (SELECT DISTINCT Activity_Type FROM Table1) a 
    ON 1=1 
LEFT JOIN Table1 t 
    ON s.ServiceID = t.ServiceID 
AND a.Activity_Type = t.Activity_Type 
ORDER BY ServiceID, Activity_Type DESC 

唯一真正的RDBMS依賴的部分是ISNULL,對於例如在MySQL被稱爲IFNULL

An SQLfiddle to test with

0

如果將Activity_type列定義爲允許null值,那麼在執行INSERT時,您可以跳過該值。例如,在MySQL:

INSERT INTO table1 (ServiceID, Start_date, End_date) values (1, '2012-12-03', '2020-12-03'); 

其它數據庫可能略有不同默認格式指定日期,但這個想法應該是一樣的。

+0

再次閱讀該問題。 – Maximus 2013-05-08 04:42:18

+0

@Sivakumar:這不是最清楚的問題,並且不是很明顯涉及多個表格。我決定回答對這個問題的最簡單的解釋,以防事實證明這是OP所要求的。 – 2013-05-08 04:45:09