如何基于另一列创建新的列?

heimao

我有一个查询,给我这张表:

| contract | sent_date |
| -------- | --------- |
|    a     |2020-01-02 |
|    a     |2020-01-02 |
|    b     |2020-01-02 |
|    a     |2020-01-03 |
|    c     |2020-01-03 |
|    b     |2020-01-04 |
|    a     |2020-01-05 |
|    a     |2020-01-05 |

我想汇总每个发送日期的每个合同的计数。因此,返回表如下所示:

| contract | 2020-01-02 | 2020-01-03 | 2020-01-04 | 2020-01-05 |
| -------- | ---------- | ---------- | ---------- | ---------- |
|    a     |     2      |     1      |     0      |     2      |
|    b     |     1      |     0      |     1      |     0      |
|    c     |     0      |     1      |     0      |     0      |

任何人都可以给我一些指导以形成这样的查询吗?谢谢。

戈登·利诺夫

如果知道所需的日期列表,请使用条件聚合:

select contract,
       sum(case when sent_date = '2020-01-02' then 1 else 0 end),
       sum(case when sent_date = '2020-01-03' then 1 else 0 end),
       sum(case when sent_date = '2020-01-04' then 1 else 0 end),
       sum(case when sent_date = '2020-01-05' then 1 else 0 end)
from t
group by contract;

如果列表基于数据,则需要动态SQL。确切的语法取决于您使用的数据库。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章