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

时间:2011-08-09 16:36:15

标签: sql-server sql-server-2005

在编写此查询时需要您的帮助。运行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分别代表第一行,第二行和第三行。

1 个答案:

答案 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