2016-11-21 93 views
1

我的表格包含訪問數據,訪問日期,訪問者的類型和數量。它看起來像:SQL請求總和和多個條件

| Date_Visit | Type | Nb_Visitors | 
04-05-2015 Intern 3 
08-09-2015 Extern 10 
13-09-2015 Intern 2 
17-09-2015 Intern 6 
    ...  ...  ... 

我想有作爲輸出是這樣的:

|DateMonth | Nb_Visit_Extern | Nb_Visitors_Extern | Nb_Visit_Intern | Nb_Visitors_Intern | 
05-2015  1     3     0     0 
09-2015  1     10     2     8 

我查詢的樣子:

SELECT CONVERT (VARCHAR(7), [Date_Visit], 20) As DateMonth, 
COUNT(*) Nb_Visit_Extern, 
SUM(Nb_Visitors) Nb_Visitors_Extern 
From MyTable 
Where [Type] = 'Extern' 
GROUP BY CONVERT (VARCHAR(7), [Date_Visit], 20) 
ORDER BY CONVERT (VARCHAR(7), [Date_Visit], 20) ASC 

SELECT CONVERT (VARCHAR(7), [Date_Visit], 20) As DateMonth, 
COUNT(*) as Nb_Visit_Intern, 
SUM(Nb_Visitors) as Nb_Visitors_Intern 
From MyTable 
Where [Type] = 'Intern' 
GROUP BY CONVERT (VARCHAR(7), [Date_Visit], 20) 
ORDER BY CONVERT (VARCHAR(7), [Date_Visit], 20) ASC 

我試圖使用CASE條件,但它沒有與SUM語句一起工作。 我該怎麼辦?

回答

1

您可以使用簡單的計數和SQL的Sum函數。

SELECT CONVERT (VARCHAR(7), [Date_Visit], 20) As DateMonth, 
COUNT(case when Type = 'Extern' then 1 else 0 end) Nb_Visit_Extern, 
SUM(case when Type = 'Extern' then [Nb_Visitors] else 0 end) Nb_Visitors_Extern, 
COUNT(case when Type = 'Intern' then 1 else 0 end) Nb_Visit_Intern, 
SUM(case when Type = 'Intern' then [Nb_Visitors] else 0 end) Nb_Visitors_Intern 
GROUP BY CONVERT (VARCHAR(7), [Date_Visit], 20) 
ORDER BY CONVERT (VARCHAR(7), [Date_Visit], 20) ASC 
+0

如果您發現任何問題,請提及我。開心討論。 –

0

您應該使用case表達類似

SUM(case when Type = 'Extern' then 1 else 0 end) as Nb_Visitors_Extern