在编写此查询时需要您的帮助.运行SQL 2005标准版.
我有一个基本查询,它从一个表中获取记录的子集,其中record_Count大于1.
SELECT *
FROM Table_Records
WHERE Record_Count > 1
这个查询给了我一个结果集,比如说:
TableRecords_ID Record_Desc Record_Count
123 XYZ 3
456 PQR 2
需要修改上述查询,以便每条记录与Record_Count一样多次出现,并将其迭代次数作为值.所以新查询应返回如下结果:
TableRecords_ID Record_Desc Record_Count Rec_Iteration
123 XYZ 3 1
123 XYZ 3 2
123 XYZ 3 3
456 PQR 2 1
456 PQR 2 2
有人可以帮我们写这个查询吗?感谢帮助.
澄清:Rec_Iteration列是Record_Count的子表示.基本上,由于XYZ描述有三个Record_Count,因此返回三行,Rec_Iteration分别表示第一行,第二行和第三行.
最佳答案 您可以使用
recursive CTE进行此查询.下面我使用表变量@T而不是表Table_Records.
declare @T table(TableRecords_ID int,Record_Desc varchar(3), Record_Count int)
insert into @T
select 123, 'XYZ', 3 union all
select 456, 'PQR', 2
;with cte as
(
select TableRecords_ID,
Record_Desc,
Record_Count,
1 as Rec_Iteration
from @T
where Record_Count > 1
union all
select TableRecords_ID,
Record_Desc,
Record_Count,
Rec_Iteration + 1
from cte
where Rec_Iteration < Record_Count
)
select TableRecords_ID,
Record_Desc,
Record_Count,
Rec_Iteration
from cte
order by TableRecords_ID,
Rec_Iteration