2011-08-09 34 views
4

在編寫此查詢時需要大家的幫助。運行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

這樣做會不會更容易:當您的應用程序顯示數據時,重複當前行的Record_Count次? –

+0

是的,如果你只是要顯示數據並有機會操作它。在我的情況下,查詢直接在報表生成器中使用,操縱的機會不存在。 – GoGetter

回答

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 
+0

這很好...感謝Mikael – GoGetter

+0

這也幫助我,以及很好的答案。 –