2

我正在尝试从我的数据库创建一个查询,该查询将根据计数列将每行扩展到多行。我需要的是拿我的桌子:

[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。

4

3 回答 3

4

您可以使用递归 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)

是一个 sql fiddle供您尝试。

于 2013-01-03T20:40:14.833 回答
2

为此,您需要一个像这样的计数表:http ://www.sqlmag.com/article/sql-server/virtual-auxiliary-table-of-numbers

然后你可以写:

SELECT [Date], Other_Column
FROM dbo.MyTable
CROSS APPLY dbo.GetNums([COUNT]);

这是一个 SQL-Fiddle,用于显示实际的解决方案:http ://sqlfiddle.com/#!6/2edda/2

于 2013-01-03T20:37:26.773 回答
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 
于 2013-01-03T21:27:05.867 回答