行到具有不同日期范围的列

时间:2018-11-29 13:24:30

标签: sql sql-server tsql

我在使用(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”的组合创建新行首先,然后将值复制到新行...但是我可能会误会了。

1 个答案:

答案 0 :(得分:0)

好吧,我不确定这是否行得通...

select *
from Table1 a
pivot
(
 min([Value])
 FOR [Column] in (LowerBorder, UpperBorder)
) as b
相关问题