带水平日期的sql表

rhfm7lfc  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(190)

我有一个简单的sql代码示例:

Select      order_header.customer ,order_header.number_of_orders, order_header.oh_date
From        order_header
Where       order_header.oh_date >= @DateFrom And  order_header.oh_date <= @DateTo
Group By    order_header.customer, order_header.number_of_orders, order_header.oh_date

它所做的只是列出客户和日期的订单数量,但我想让它更复杂-取决于什么 @DateFrom 以及 @DateTo 我输入-它能为每个日期创建列吗?
例如,如果我选择日期从2020年6月1日到2020年6月4日,它将为每个日期和按客户名称购买的订单数量创建列:

von4xj4u

von4xj4u1#

可以使用条件聚合来完成此操作,但需要枚举日期:

select
    customer,
    sum(case when oh_date = '2020-06-01' then number_of_orders end) number_of_orders_2020_06_01,
    sum(case when oh_date = '2020-06-02' then number_of_orders end) number_of_orders_2020_06_02,
    sum(case when oh_date = '2020-06-03' then number_of_orders end) number_of_orders_2020_06_03,
    sum(case when oh_date = '2020-06-04' then number_of_orders end) number_of_orders_2020_06_04
from order_header
where oh_date between 2020-06-01' and 2020-06-04'
group by customer

如果要基于给定的日期范围动态生成列,则需要动态sql,这是另一个复杂级别。

相关问题