我有一张做计件工作的人的桌子。表中的每个条目都有一个用户 ID、名称和他们输入的每个报告的日期。
我需要每周报告这些人从周日开始每天所做的事情
- 从周日开始,你如何按一周分组?
- 您如何为每天的每个 COUNT(*) 制作一列?
t0001, Tod, 2015-6-29
t0001, Tod, 2015-6-29
t0001, Tod, 2015-6-29
t0001, Tod, 2015-6-29
t0001, Tod, 2015-6-29
t0001, Tod, 2015-6-28
t0001, Tod, 2015-6-28
b0002, Ben, 2015-6-29
b0002, Ben, 2015-6-29
b0002, Ben, 2015-6-28
这就是我要找的。
NAME | S | M | T | W | R | F | S | TOTAL
----------------------------------------
TOD | 2 | 5 | - | - | - | - | - | 7
BEN | 1 | 2 | - | - | - | - | - | 3
这是一种方法。假设此表和样本数据:
然后使用变量或参数来指示您关心的星期:
结果:
另一种方式:
不要忘记清理:
您可以在 SQL Server 中使用以下方法将数据转换为您要查找的格式。您也可以使用 PIVOT 运算符,但我更喜欢写出 CASE 语句,因为我发现语法更清晰(在我检查过的所有情况下,它们总是解析为相同的查询计划)。
基于 Aaron 指出 DATENAME 的缺点的更新答案。感谢您指出这一点,亚伦!我们主要使用基于英语的数据库,但这显然是一个更广泛的愚蠢假设。
作为参考,这是原始回复(如果不使用英语,则不正确!):
您也可以考虑使用该
DATEPART
函数,但请注意,它取决于DATEFIRST
配置方式,因此可能并不总是在不同数据库或配置更改时返回相同的结果:我不知道在 SQL Server 上是否相等,我在 MySQL 中使用该
WEEKDAY
函数进行了此操作。表
UserRecords
:询问:
结果: