SQL查询:时间序列日期上的二进制字段

时间:2013-09-10 19:01:48

标签: sql sql-server-2005 time-series

我的表格如下所示:

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。

1 个答案:

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