2016-11-21 56 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