按日期和所有唯一值的总和进行分组

问题描述 投票:0回答:2

我正在尝试为此报告编写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 | ... |
+--------+------+--------+-----+
mysql sql case-when
2个回答
0
投票

一个简单的

SELECT date, name, count(*) FROM myTable GROUP BY date, name; 

应该管用


0
投票

你可以使用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

© www.soinside.com 2019 - 2024. All rights reserved.