0

我有一个如下所示的表:

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。

4

1 回答 1

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(或您最喜欢的电子表格)中的公式为该列生成代码。

于 2013-09-10T20:00:35.763 回答