按日期分组时将整数行转换为列
Posted
技术标签:
【中文标题】按日期分组时将整数行转换为列【英文标题】:Converting Integer Rows into Columns While Grouping by Date 【发布时间】:2015-06-21 14:00:05 【问题描述】:我有下表包含这些列 TimeStamp[DateTime]、FromSysId[Int]、CrUSSDCnt[Int]
TimeStamp FromSysId CrUSSDCnt
2015-06-18 18:58:15.380 25 7
2015-06-18 19:45:17.130 21 8
2015-06-18 20:43:18.920 22 15
2015-06-18 21:34:33.090 25 6
2015-06-18 22:55:33.317 22 10
我想将每个 FromSysId 显示为列,同时计算每个 FromSysId 的 CrUSSDCnt 列,并按小时对 TimeStime 进行分组,如下所示:
TimeStamp Sys25 Sys22 Sys21
2015-06-18 18:00:00 2 1 0
2015-06-18 19:00:00 4 6 3
2015-06-18 20:00:00 0 5 6
2015-06-18 21:00:00 0 7 2
2015-06-18 22:00:00 1 0 4
我尝试使用 pivot 或 Joint,但我都未能像这样总结。 任何帮助。
【问题讨论】:
请用无效的查询编辑您的问题。 【参考方案1】:这个问题的难点在于从时间中提取小时。这是一种方法:
select dateadd(hour, 0, datediff(hour, 0, timestamp)) as ToTheHour,
sum(case when FromSysId = 25 then CrUSSDCnt else 0 end) as Sys25,
sum(case when FromSysId = 22 then CrUSSDCnt else 0 end) as Sys22,
sum(case when FromSysId = 21 then CrUSSDCnt else 0 end) as Sys21
from table t
group by dateadd(hour, 0, datediff(hour, 0, timestamp))
order by ToTheHour;
剩下的只是条件聚合。
【讨论】:
@AbdallaOmar 。 . .如果你有问题,你应该把它当作一个问题而不是一个答案。如果您仍需要帮助,请提出另一个问题。以上是关于按日期分组时将整数行转换为列的主要内容,如果未能解决你的问题,请参考以下文章