2015-08-28 61 views
2

當我做一個左外連接時,我希望得到所有記錄,查詢將返回左表中與左表不匹配的所有記錄。左連接沒有給出所有記錄我的查詢有什麼問題

我想選擇記錄,即使月份數據在表格中不可用。假設我有五個月的記錄。所以當我執行我的查詢時,我想要總數爲12的記錄[left outer join],其值爲0,形成右表[client_service]表。

我的查詢是提前

SELECT YEAR(CLIENT_SERVICE.cliserv_effective_date) As Year 
     , MonthsTable.MonthName As Month 
     , COUNT(CLIENT_SERVICE.cliserv_id) As ClientsInService 
FROM MonthsTable 
     left outer join CLIENT_SERVICE 
     ON MonthsTable.MonthName = DATENAME(month,CLIENT_SERVICE.cliserv_effective_date) 
WHERE CLIENT_SERVICE.serv_id = 24 
     AND CLIENT_SERVICE.cliserv_status = 'Active' 
     AND YEAR(CLIENT_SERVICE.cliserv_effective_date) BETWEEN 2014 AND 2015 
GROUP BY YEAR(CLIENT_SERVICE.cliserv_effective_date) 
     , DATENAME(month,CLIENT_SERVICE.cliserv_effective_date) 
     , [MonthsTable].MonthName 
     , MONTH(CLIENT_SERVICE.cliserv_effective_date) 
ORDER BY YEAR(CLIENT_SERVICE.cliserv_effective_date) 
     , MONTH(CLIENT_SERVICE.cliserv_effective_date); 

謝謝!

+1

這是'CLIENT_SERVICE.serv_id = 24 CLIENT_SERVICE.cliserv_status =「Active'',消除了行,因爲如果沒有匹配的CLIENT_SERVICE行,這些屬性將是NULL。最好在Join子句的「ON」部分添加這些條件 – Ronald

回答

0

您在where子句中有右列的列。把它放在上子句:

SELECT YEAR(CLIENT_SERVICE.cliserv_effective_date) As Year, 
MonthsTable.MonthName As Month, COUNT(CLIENT_SERVICE.cliserv_id) As ClientsInService 
FROM MonthsTable left outer join CLIENT_SERVICE ON MonthsTable.MonthName = DATENAME(month,CLIENT_SERVICE.cliserv_effective_date) and CLIENT_SERVICE.serv_id = 24 
AND CLIENT_SERVICE.cliserv_status = 'Active' 
AND YEAR(CLIENT_SERVICE.cliserv_effective_date) BETWEEN 2014 AND 2015 
GROUP BY YEAR(CLIENT_SERVICE.cliserv_effective_date), DATENAME(month,CLIENT_SERVICE.cliserv_effective_date), 
[MonthsTable].MonthName,MONTH(CLIENT_SERVICE.cliserv_effective_date) 
ORDER BY YEAR(CLIENT_SERVICE.cliserv_effective_date), 
MONTH(CLIENT_SERVICE.cliserv_effective_date)