2016-11-06 88 views
0

我正在寻找一种方法来转换行以显示日期时间数据的一天作为列和小时在一个月中的第一行。 这是在一个月内我的示例数据:SQL Server - 将天数转换为列,小时为行

Time     | Value 
-------------------------------- 
2016-10-01 00:00:00 | 23 
2016-10-01 00:30:00 | 35 
.....     | ..... 
2016-10-31 23:30:00 | 52 

我想要的结果是

Time   | 1 | .... | 31 | <-- Day 1 - 31 
--------------------------------------- 
00:00:00  | 23 | .... | .... | 
00:30:00  | 35 | .... | .... | 
...   | .... | .... | .... | 
23:30:00  | .... | .... | 52 | 

如何建立结果呢?

+0

希望发生的事情时,有一个以上的'Value'为同一'Time'? –

+0

另外你如何计划显示多个月的数据? –

+0

@Prdp数据在同一时间内没有相同的值 –

回答

0

您可以使用Conditional Aggregate做到这一点

select cast([Time] as time), 
     Max(case when DAY([Time]) = 1 then Value end) As [1] 
     Max(case when DAY([Time]) = 2 then Value end) As [2] 
     Max(case when DAY([Time]) = 3 then Value end) As [3] 
     ..... 
     Max(case when DAY([Time]) = 31 then Value end) As [31] 
From yourtable 
Where Month([Time]) = 10 -- pass the required month 
Group by cast([Time] as time) 
+0

我想一个更圆滑的解决方案,如果月份是2月份,日期只显示28或29,如果年份是线性的,但我想保持简单这应该也是:) –

+0

是的,这项工作是我想要的。还有一个问题,可以根据输入的月份的天数生成日栏数? –

+0

@KukuhHeruIrawan - 您需要使用动态查询 –