【发布时间】:2015-03-07 06:52:37
【问题描述】:
我有两张桌子。 表 1 中的相关列如下所示:
[DateField ][H0][H1]...[H23]
2014-09-01 2 4 2
2014-09-02 3 1 4
...
2014-09-30 3 3 2
表 2 的相关列如下所示:
[DateField ][Start][End][T-Val][Status]
2014-09-01 0 4 1 Off
2014-09-01 5 18 2 Low
2014-09-01 19 23 1 Off
2014-09-02 0 10 1 Off
2014-09-02 11 20 2 Med
2014-09-02 21 23 1 Off
...
我需要得到类似...的输出
[DateField ][H0][H1]...[H23][H0TST][H1TST]...[H12TST]...[H23TST]
2014-09-01 2 4 2 1_Off 1_Off 2_Low 1_Off
2014-09-02 3 1 4 1_Off 1_Off 2_Med 1_Off
...
另外制作了 24 列,每列的 T-Val 和 Status 值基于与单个日期对应的 Start 和 End 值。
T-Val 和 Status 字段依赖于 Start 和 End 字段,因此 H0TST 将根据 H0TST 中的 0 收集 T-Value 和 Status,具体取决于它所在的 Start 和 End 范围行。
在 DateField 列上加入两个表后,我应该如何构建查询的其余部分?
请帮我指出正确的方向,谢谢!
【问题讨论】:
-
鉴于您的表结构,我认为这不会起作用。如果您只在 Date 加入,您的额外字段如何知道
Table2中要使用哪个T-Val和Status? -
我更新了问题,谢谢。
-
我会使用 select 与 join 和 case 条件,这将返回 concat 你的期望值
-
使用“CASE WHEN .... ELSE '' END”表达式创建您需要的 24 列。您还需要按日期分组,并且只保留每个此类列的 MAX()
-
知道了。从@jpw 的建议开始,我得到了想要的结果。谢谢大家!
标签: sql sql-server sql-server-2012