我正在尝试为此报告编写SQL查询以按日期分组,并获取所有唯一值的计数。我遇到的问题是,我不知道我将提前有多少独特的价值观。
样本表:
+--------+--------+
| Date | Name |
+--------+--------+
| 1/1/18 | John |
| 1/1/18 | John |
| 1/1/18 | Sylvia |
| 1/2/18 | Sylvia |
+--------+--------+
这就是我的尝试,但它要求我知道John和Sylvia存在于表中。如果有50,000个唯一名称而不必输入所有CASE语句,那么解决方法是什么。
SELECT
date,
SUM(CASE WHEN name='John' THEN 1 ELSE 0 END) AS John,
SUM(CASE WHEN name='Sylvia' THEN 1 ELSE 0 END) AS Sylvia
FROM myTable
GROUP BY date;
预期产量:
+--------+------+--------+-----+
| Date | John | Sylvia | ... |
+--------+------+--------+-----+
| 1/1/18 | 2 | 1 | ... |
| 1/2/18 | 0 | 1 | ... |
+--------+------+--------+-----+
一个简单的
SELECT date, name, count(*) FROM myTable GROUP BY date, name;
应该管用
你可以使用Dynamic PIVOT.
实现这一目标
Declare @sql nvarchar(max)
set @sql = 'select *
from (select *,count(name)cnt from #mytable group by name,date)A
PIVOT
( sum(cnt)
FOR name
in ( '+stuff(( select distinct ', '+ name from #mytable group by name for xml path('')),1,1,'')+')
)as PIVOTTABLE'
EXECUTE sp_executesql @sql;
这个链接可能会帮助你MySQL Select Query to generate dynamic column Result