首页 > 解决方案 > 对于两者之间的每个值,两列之间的差异分为单独的行

问题描述

我无法解释我的问题,但我有这张桌子

ID  START   END
1   10      12
2   30      31
3   11      13

并想要这样的东西:

ID  NUMBER
1   10
1   11
1   12
2   30
2   31
3   11
3   12
3   13

我需要将两列之间的所有唯一整数转换为单独的行。

这就是我希望转换的样子

我没有尝试过任何事情,因为我什至不知道如何调用这样的程序,所以感谢您的帮助

标签: sqlsql-servertransform

解决方案


如果您没有数字表(强烈推荐),您可以将临时计数表与CROSS APPLY

例子

Select A.ID
      ,B.Number 
 From  YourTable A
 Cross Apply ( Select Top ([End]-[Start]+1) 
                      Number=[START]-1+Row_Number() Over (Order By (Select NULL)) 
                From  master..spt_values n1, master..spt_values n2 
             ) B

退货

ID  Number
1   10
1   11
1   12
2   30
2   31
3   11
3   12
3   13

推荐阅读