sql - SQL 查询以在每个月的第一天到最后一天的列中显示每日计数结果
问题描述
需要一个查询来显示从每月的第一天到最后一天的列中客户购买的每件商品的每日计数
示例数据表“项目”
+--------+--------+----------+---------------+
| Purchase Date | Item Code| Item Name| Price|
|--------+--------+----------+--------------+
| 01-JAN-20 | 11 | Apple | 1 |
| 01-JAN-20 | 11 | Apple | 1 |
| 02-JAN-20 | 12 | Orange | 2 |
| 02-JAN-20 | 11 | Apple | 1 |
| 03-JAN-20 | 12 | Orange | 2 |
| 03-JAN-20 | 12 | Orange | 2 |
| 04-JAN-20 | 12 | Orange | 2 |
| 04-JAN-20 | 11 | Apple | 1 |
+--------+--------+----------+--------------+
SQL 查询应使用项目代码显示每日计数,结果如下表所示。每天计数,每一天都显示在当天的列中,例如,如果今天是 1 月 4 日,那么明天计数将创建具有计数结果的新列,并持续到月的最后一天或类似的东西。
+--------+--------+----------+---------------+
| Items | Jan 01| Jan 02| Jan 03|Jan 04| etc
+--------+--------+----------+--------------+
| Apple | 2 | 1 | 2 | 1 |
| Orange | 0 | 1 | 0 | 1 |
+--------+--------+----------+--------------+
解决方案
如果你知道你想要什么日期,你可以使用条件聚合:
select item,
sum(case when purchase_date = '2020-01-01' then 1 else 0 end) as jan_1,
sum(case when purchase_date = '2020-01-02' then 1 else 0 end) as jan_2,
sum(case when purchase_date = '2020-01-03' then 1 else 0 end) as jan_3,
sum(case when purchase_date = '2020-01-04' then 1 else 0 end) as jan_4,
. . .
from items
group by item;
请注意,这假定它purchase_date
确实存储为内部日期格式。所以比较是一个日期常数——但是,这可能因数据库而异。
如果您没有记住一组特定的日期,那么您将需要使用动态 SQL。
推荐阅读
- javascript - 获取 HTML5 中视频元素的控件(洗涤器)元素
- r - 在 R 中操作矩阵的条目
- python - Locust 可以运行与 UI 交互的脚本吗?
- reactjs - 定时器组件在超时后继续运行
- android - 从 android 设备中删除 firebase 通知(服务器端)
- python - AttributeError:“QuerySet”对象没有属性“is_staff”
- python - PyMongo 聚合不适用于 $max 运算符
- c# - LINQ 连接中的两个上下文
- c++ - std::time_point 从和到 std::string
- apache-spark - 当前摄取的 Apache Hudi 提交 ID