sql-server – 根据列中的值(使用迭代器)展开行结果

在编写此查询时需要您的帮助.运行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
点赞