date—sql查询,以列形式显示从每月第一天到最后一天的每日计数结果

esbemjvw  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(420)

需要一个查询来显示从每月第一天到最后一天客户购买的每件商品的每日计数
示例数据表“item”

+--------+--------+----------+---------------+
| 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  |
+--------+--------+----------+--------------+
mo49yndu

mo49yndu1#

如果您知道需要什么日期,可以使用条件聚合:

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。

相关问题