在编写此查询时需要您的帮助。运行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分别代表第一行,第二行和第三行。
答案 0 :(得分:2)
您可以使用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