2016-10-22 171 views
2

加入什麼我應該用得到我想要的輸出基礎上,虛擬見下表SQL服務器加入/應用查詢

詳細信息表

x------------------------------x 
| empID | empName | date  | 
x------------------------------x 
| 1  | emp1 | 10/01/2016 | 
| 1  | emp1 | 10/03/2016 | 
| 1  | emp1 | 10/04/2016 | 
| 1  | emp1 | 10/05/2016 | 
| 1  | emp1 | 10/06/2016 | 
x------------------------------x 

LIST日期自2016年10月1日至10 /二千零十六分之一十五表的

x------------x 
| date  | 
x------------x 
| 10/01/2016 | 
| 10/02/2016 | 
| .......... | 
| .......... | 
| 10/15/2016 | 
x------------x 

所需的輸出爲我的查詢

x------------------------------x 
| empID | empName | date  | 
x------------------------------x 
| 1  | emp1 | 10/01/2016 | 
| null | null | 10/02/2016 | 
| 1  | emp1 | 10/03/2016 | 
| 1  | emp1 | 10/04/2016 | 
| 1  | emp1 | 10/05/2016 | 
| 1  | emp1 | 10/06/2016 | 
| null | null | 10/07/2016 | 
| null | null | 10/08/2016 | 
| null | null | 10/09/2016 | 
| null | null | 10/10/2016 | 
| null | null | 10/11/2016 | 
| null | null | 10/12/2016 | 
| null | null | 10/13/2016 | 
| null | null | 10/14/2016 | 
| null | null | 10/15/2016 | 
x------------------------------x 
+0

爲什麼'empID'非匹配的記錄? –

+0

我忘了更改所需的輸出empID,如果沒有日期在日期範圍列表中匹配,則empName應爲null – Devs

回答

1

答案是OUTER JOIN它可以是LEFTRIGHT這取決於你所使用的detail哪裏表。

SELECT D.empid, 
     D.empname, 
     LD.[date] 
FROM detail D 
     RIGHT OUTER JOIN list_dates LD 
        ON D.[date] = LD.[date] 

您也可以使用OUTER APPLY

SELECT D.empid, 
     D.empname, 
     LD.[date] 
FROM list_dates LD 
     OUTER apply (SELECT * 
        FROM detail D 
        WHERE D.[date] = LD.[date]) D