如何按天获取值的总和,但在 SQL 列中获取天数
How do you get the sum of values by day, but day in columns SQL
我有一个 table,看起来像下面存储日期、client_name 和 order_value 的地方/
select day, client_name, order_value
from sample_table
day
client_name
order_value
2021-01-01
A
100
2021-01-01
A
100
2021-01-02
A
200
2021-01-03
A
100
2021-01-01
B
300
2021-01-01
B
400
2021-01-01
C
500
2021-01-02
C
500
2021-01-02
C
500
我想按天计算每个客户 order_value 的总和,但按列计算天数。
基本上,我希望我的结果是这样的。
client_name
2021-01-01
2021-01-02
2021-01-03
A
200
200
100
B
700
Null
Null
C
500
1000
Null
如果知道天数,可以使用条件聚合:
select client_name,
sum(case when date = '2021-01-01' then order_value end) as date_20210101,
sum(case when date = '2021-01-02' then order_value end) as date_20210102,
sum(case when date = '2021-01-03' then order_value end) as date_20210103
from t
group by client_name ;
如果您不知道具体日期(即,您希望它们基于数据或可变数字),那么您需要使用动态 SQL。这意味着您将 SQL 语句构造为字符串,然后执行它。
我有一个 table,看起来像下面存储日期、client_name 和 order_value 的地方/
select day, client_name, order_value
from sample_table
day | client_name | order_value |
---|---|---|
2021-01-01 | A | 100 |
2021-01-01 | A | 100 |
2021-01-02 | A | 200 |
2021-01-03 | A | 100 |
2021-01-01 | B | 300 |
2021-01-01 | B | 400 |
2021-01-01 | C | 500 |
2021-01-02 | C | 500 |
2021-01-02 | C | 500 |
我想按天计算每个客户 order_value 的总和,但按列计算天数。 基本上,我希望我的结果是这样的。
client_name | 2021-01-01 | 2021-01-02 | 2021-01-03 |
---|---|---|---|
A | 200 | 200 | 100 |
B | 700 | Null | Null |
C | 500 | 1000 | Null |
如果知道天数,可以使用条件聚合:
select client_name,
sum(case when date = '2021-01-01' then order_value end) as date_20210101,
sum(case when date = '2021-01-02' then order_value end) as date_20210102,
sum(case when date = '2021-01-03' then order_value end) as date_20210103
from t
group by client_name ;
如果您不知道具体日期(即,您希望它们基于数据或可变数字),那么您需要使用动态 SQL。这意味着您将 SQL 语句构造为字符串,然后执行它。