2013-01-03 31 views
1

我想從我的數據庫創建一個查詢,它將根據計數列將每行擴展到多行。我需要的是把我的表:從一行查詢中的多行

[DATE]  [COUNT]  [OTHER_COLUMN] 
20120101 3   X 
20120201 2   Y 

創建此:

[DATE]  [OTHER_COLUMN] 
20120101 X 
20120101 X 
20120101 X 
20120201 Y 
20120201 Y 

我發現很多方法可以做相反的事情(多行合併爲一個),或擴大一行將多列分成多行(一列基於每列),但我似乎無法找到創建相同行的方式。我使用SQL Server 2012的

回答

2

您可以使用遞歸CTE:

;WITH CTE AS 
(
    SELECT *, 1 RN 
    FROM YourTable 
    UNION ALL 
    SELECT [DATE], [COUNT], [OTHER_COLUMN], RN+1 
    FROM CTE 
    WHERE RN+1 <= [COUNT] 
) 
SELECT [DATE], [OTHER_COLUMN] 
FROM CTE 
OPTION(MAXRECURSION 0) 

here is a sql fiddle供您試用。

+0

+1我只是寫這個版本。 – Taryn

+0

@bluefeet謝謝,現在添加了一個小提琴 – Lamak

+0

這導致表在每個遞歸步驟被掃描一次。如果表格增長或計數增加,這將會非常緩慢。 –

0

另一種方法來做到這一點。請注意,你應該有[count] < = 2048。否則,根據需要構建另一個數字表。

WITH num AS (
    SELECT number 
    FROM master..spt_values WHERE type = 'P' 
) 
SELECT 
    [DATE],[OTHER_COLUMN] 
FROM your_table t 
INNER JOIN num n 
    ON n.number < t.COUNT