答案 0 :(得分:2)
我喜欢为此目的使用递归CTE:
A
如果您的数据不是太大,那么性能应该很好。如果数据量较大,则可能需要考虑数字表。
答案 1 :(得分:0)
您可以尝试以下查询
create table #temp (name varchar(20),name2 varchar(20), value int)
insert into #temp values ('aaaa', 'bbbb', 10),('afb', 'bgr', 4)
;WITH
expanded
AS
(
SELECT name, name2, value FROM #temp
UNION ALL
SELECT name, name2, value - 1 FROM expanded WHERE value > 1
)
SELECT
name, name2, 1 as value,
ROW_NUMBER() OVER (ORDER BY name, name2, value) AS unique_ref
FROM
expanded
ORDER BY
name,
name2,
value
输出如下所示
name name2 value unique_ref
aaaa bbbb 1 1
aaaa bbbb 1 2
aaaa bbbb 1 3
aaaa bbbb 1 4
aaaa bbbb 1 5
aaaa bbbb 1 6
aaaa bbbb 1 7
aaaa bbbb 1 8
aaaa bbbb 1 9
aaaa bbbb 1 10
afb bgr 1 11
afb bgr 1 12
afb bgr 1 13
afb bgr 1 14
您可以在此处找到演示-Demo