我在使用(T-)SQL转换以这种格式给出的数据时遇到问题...
Group Column Value ValidFrom ValidTo
1 LowerBorder 150000 25.09.2018 31.12.2999
1 LowerBorder 0 13.09.2018 25.09.2018
1 LowerBorder 150000 08.09.2018 13.09.2018
1 LowerBorder 0 07.09.2018 08.09.2018
1 UpperBorder 450000 08.09.2018 31.12.2999
1 UpperBorder 0 07.09.2018 08.09.2018
2 LowerBorder 5 08.09.2018 31.12.2999
2 UpperBorder 7 08.09.2018 31.12.2999
为此格式:
Group LowerBorder UpperBorder ValidFrom ValidTo
2 5 7 08.09.2018 31.12.2999
1 150000 450000 25.09.2018 31.12.2018
1 0 450000 13.09.2018 25.09.2018
1 150000 450000 08.09.2018 13.09.2018
1 0 0 07.09.2018 08.09.2018
为说明起见,让我们看一下第一个表中第1组中两行的“ ValidFrom”日期均为07.09.2018的情况。将它们放在一起,我们将在第二个表的底部找到该行。这是简单的情况,因为它们具有相同的“ ValidTo”日期。
但是,如果您查看组1中日期为08.09.2018的两行->其中一行的有效期为13.09.2018,另一行的有效期为31.12.2999。因此,第二行的值(与“ UpperBorder”相关)在“直到结束”之前都是有效的,但是“ LowerBorder”在“ the end”之前将有更多行。因此,我很难在表2中创建行。
我很确定我必须将PIVOT函数用作第二步,但我错过了第一步...我有一种直觉,我必须以某种方式为“列”和“ ValidFrom”的组合创建新行首先,然后将值复制到新行...但是我可能会误会了。
答案 0 :(得分:0)
好吧,我不确定这是否行得通...
select *
from Table1 a
pivot
(
min([Value])
FOR [Column] in (LowerBorder, UpperBorder)
) as b