我看了看一些示例,但没有一个适合我的需求。
我有一张桌子:
+-------+-----------+-----------+
| Year | Month | Count |
+-------+-----------+-----------+
| 2001 | Nov | 2 |
| 2001 | Dec | 1 |
| 2002 | Jan | 3 |
+-------+-----------+-----------+
现在,我的想法是我想根据“计数值”将“年”和“月”值x插入到另一个表中。所以我应该以如下形式结束:
+-------+-----------+
| Year | Month |
+-------+-----------+
| 2001 | Nov |
| 2001 | Nov |
| 2001 | Dec |
| 2002 | Jan |
| 2002 | Jan |
| 2002 | Jan |
+-------+-----------+
这只是一个小样本,实际表要大得多。
任何有关此的指针都很好。 希望我的询问有意义,如有任何问题,请询问:)
答案 0 :(得分:2)
使用提示表的想法,您可以轻松地做到这一点。这是您的数据示例。
declare @Something table
(
MyYear int
, MyMonth char(3)
, MyCount int
)
;
insert @Something values
(2001, 'Nov', 2)
,(2001, 'Dec', 1)
,(2002, 'Jan', 3)
;
WITH
E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
cteTally(N) AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E1
)
insert YourOtherTable
(
YourYear
, YourMonth
)
select s.MyYear
, s.MyMonth
from @Something s
join cteTally t on t.N <= s.MyCount
答案 1 :(得分:2)
您还可以将递归cte用作
WITH CTE AS
(
SELECT *
FROM T
UNION ALL
SELECT [Year], [Month], [Count] -1
FROM CTE
WHERE [Count]-1 > 0
)
SELECT T.*
FROM T LEFT JOIN CTE
ON T.Year = CTE.Year
AND
T.Month = CTE.Month