【发布时间】:2017-07-06 15:58:22
【问题描述】:
我有这张桌子
+-----+------+--------+--------+
| ID | Name | Start | End |
+-----+------+--------+--------+
| 20 | Mike | 1 | 3 |
| 21 | Luke | 4 | 7 |
+-----+------+--------+--------+
我想根据每个人的范围(开始/结束)生成所有行。
结果应该是这样的
+-----+------+-----------------+
| ID | Name | Start_End |
+-----+------+-----------------+
| 20 | Mike | 1 |
| 20 | Mike | 2 |
| 20 | Mike | 3 |
| 21 | Luke | 4 |
| 21 | Luke | 5 |
| 21 | Luke | 6 |
| 21 | Luke | 7 |
+-----+------+--------+--------+
为了获得基于开始和结束列的唯一值,我有这个功能
CREATE FUNCTION [dbo].[ufn_SplitRange] (@Start INT, @End INT)
RETURNS TABLE
AS
RETURN
(
SELECT TOP (@End - @Start+1) ROW_NUMBER() OVER (ORDER BY S.[object_id])+(@Start - 1) [Start_End]
FROM sys.all_objects S WITH (NOLOCK)
);
上述函数返回(基于麦克范围1-3)的输出:
1
2
3
我一直在尝试几种方法,但找不到合适的解决方案,这似乎是一项非常常见的任务,但却是一项棘手的任务。
非常感谢任何意见
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql sql-server-2008-r2