0

在我的上下文中,客户正在提出请求,并且该请求保存在数据库中。对于每个月,我想计算每个月的请求数,所以我试过了:

Select COUNT(EveLngId) as NbreIncidentPrisEnDirect
FROM T_Evenement as TE inner join T_Historique on HisLngEveId  = EveLngId, T_Param as TPA
WHERE EveLngDosId = 1062
    And EveLngBibId = 268
    And HisLngBibId = 267
    And ParStrIndex = 'RES'
    And TE.EveLngResponsableId = TPA.ParLngId
    And EveDatRedaction = EveDatRealisation
    And year(EveDatRedaction) = '2013'
    group by MONTH(EveDatRedaction)

我得到了这个结果:

在此处输入图像描述

如您所见,那一年(2013 年)我没有每个月的值,为什么?因为对于其中一些,值为 0。即使值为 0,也有一种方法可以显示每个月的值?

4

2 回答 2

2

最好的解决方案是创建一个日历表和JOIN您的数据。否则,您将需要创建一个表:

SELECT 1 AS month, 2013 AS year
UNION ALL
SELECT 2, 2013
UNION ALL
SELECT 3, 2013
UNION ALL
SELECT 4, 2013
...

JOIN与您的查询。

于 2013-08-19T14:49:15.573 回答
0

假设您每个月都有一些数据(尽管不匹配where子句),您可以使用条件聚合:

Select sum(case when EveLngDosId = 106 And EveLngBibId = 268 And HisLngBibId = 267
                     And ParStrIndex = 'RES' And 
                     And EveDatRedaction = EveDatRealisation
                then 1 else 0
           end) as NbreIncidentPrisEnDirect
FROM T_Evenement as TE inner join
     T_Historique
     on HisLngEveId = EveLngId join
     T_Param as TPA
     on TE.EveLngResponsableId = TPA.ParLngId
WHERE year(EveDatRedaction) = '2013'
group by MONTH(EveDatRedaction);

缺点是这不会为where子句使用索引。

于 2013-08-19T15:11:04.857 回答