我的表格如下所示:
ID | Date
1 | 2010-01-01
2 | 2010-02-01
3 | 2010-02-15
2 | 2010-02-15
4 | 2010-03-01
我在创建一个ID为行的表时,以及时间段为列时遇到问题。对于给定的时间段,如果该ID在该时间段内具有关联日期,我想放置1,如果没有,则放置0。
所以输出可能如下:
ID | Jan-10 | Feb-10 | Mar-10
1 | 1 | 0 | 0
2 | 0 | 1 | 0
3 | 0 | 1 | 0
4 | 0 | 0 | 1
实现这一目标的最佳方法是什么?
我创建了一个新表,其中包含上表中所有不同的ID,以期加入 - 但我不知道如何处理1/0。
答案 0 :(得分:1)
您可以使用简单的group by
和条件聚合:
select id,
max(case when month(t.date) = 1 and year(t.date) = 2010 then 1 else 0 end) as "Jan-10",
max(case when month(t.date) = 2 and year(t.date) = 2010 then 1 else 0 end) as "Feb-10",
max(case when month(t.date) = 3 and year(t.date) = 2010 then 1 else 0 end) as "Mar-10"
from "table" t
group by id;
因为你有这么多的时间段,我会使用Excel中的公式(或你最喜欢的电子表格)为列生成代码。