2013-08-20 78 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