2013-08-19 22 views
0

在我的上下文中,客戶正在提出請求並將該請求保存在數據庫中。每個月,我想算每個月的請求數,所以我已經試過了:獲取每個月的數據(即使它在sql服務器中爲空)

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) 

而我得到的結果是:

enter image description here

所以你看,那一年(2013年)我沒有每個月的價值,爲什麼?因爲對於其中的一些,值爲0.即使值爲0,也可以顯示每個月的值?

回答

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它。

+0

將嘗試,我會給你反饋,謝謝 –

+0

如果你想要所有的月份返回,你將希望'LEFT JOIN'它與查詢。 :) – Taryn

+0

@bluefeet謝謝你指出。我只是習慣於將關鍵字反引號而不是將其用作動詞。 – Kermit

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條款。

相關問題