2013-08-20 81 views
2

在我的項目中,公司的客戶打電話詢問他們的設備。每次撥打電話時,都會保存在數據庫中。現在我需要知道有多少電話沒有公司獲得某一年的每個月,所以我已經寫了請求:加入來自兩個表的數據

SELECT COUNT(EveLngId) FROM T_Evenement 
where EveLngDosId = 1062 
And EveLngBibId = 268 
And EveTinSite = 1 
And EveLngEleId <> 17432 
And (EveTinParEmail is null OR EveTinParEmail = 0) 
And (EveLngTicketTransfertId IS NULL OR EveLngTicketTransfertId = 0) 
And (EveTinIncidentAnnulation is null or EveTinIncidentAnnulation=0) 
And YEAR(EveDatRedaction) = 2013 
group by MONTH(EveDatRedaction) 

請求的作品,但事情是,當一個月的值爲空,我不顯示或但它跳過它。所以,現在

enter image description here

我需要連接這兩個表有每個月的價值,但我可以找出如何做到這一點:要管理,創建如下日曆表。任何建議或解決方案?

+0

所以,你想加入'T_Evenement'你'Calendar'表?你能給我們一些來自'T_Evenement'的示例數據嗎? –

+0

@jyparask回答了我的問題,謝謝你的提問,下次會考慮給我更多的例子 –

回答

3
;WITH ResultsCTE AS 
(
    SELECT MONTH(EveDatRedaction) AS ResultMonth, 
      COUNT(EveLngId) AS ResultCount 
    FROM T_Evenement 
    where EveLngDosId = 1062 
      And EveLngBibId = 268 
      And EveTinSite = 1 
      And EveLngEleId <> 17432 
      And (EveTinParEmail is null OR EveTinParEmail = 0) 
      And (EveLngTicketTransfertId IS NULL OR EveLngTicketTransfertId = 0) 
      And (EveTinIncidentAnnulation is null or EveTinIncidentAnnulation=0) 
      And YEAR(EveDatRedaction) = 2013 
    GROUP BY MONTH(EveDatRedaction) 
) 
SELECT CalendarStrLibelle,ISNULL(ResultCount,0) AS ResultCount 
FROM Calendar 
     LEFT JOIN ResultsCTE 
      ON ResultMonth = CalendarLngId 
+0

+1 - 這是一個很好的答案。 – Devart

2

嘗試這一個 -

SELECT CalendarStrLibelle 
    , ResultCount = ISNULL(cnt, 0) 
FROM dbo.Calendar c 
LEFT JOIN (
    SELECT 
      [month] = MONTH(EveDatRedaction) 
     , cnt = COUNT(EveLngId) 
    FROM dbo.T_Evenement 
    WHERE EveLngDosId = 1062 
     AND EveLngBibId = 268 
     AND EveTinSite = 1 
     AND EveLngEleId <> 17432 
     AND ISNULL(EveTinParEmail, 0) = 0 
     AND ISNULL(EveLngTicketTransfertId, 0) = 0 
     AND ISNULL(EveTinIncidentAnnulation, 0) = 0 
     AND YEAR(EveDatRedaction) = 2013 
    GROUP BY MONTH(EveDatRedaction) 
) t ON t.[month] = c.CalendarLngId