鉴于每种类型有多种类型和多次出现,我想在T-SQL中生成类似的内容:
Occurrence | Type
-----------------
0 | A
1 | A
0 | B
1 | B
2 | B
每种类型的类型数和出现次数都表示为不同表中的值。
虽然我可以使用WHILE循环执行此操作,但我正在寻找更好的解决方案。
谢谢!
答案 0 :(得分:2)
这适用于我将使用的数字表。
SELECT Occurrence = ROW_NUMBER() OVER (PARTITION BY Type ORDER BY Type) - 1
, Type
FROM Numbers num
INNER JOIN #temp1 t
ON num.n BETWEEN 1 AND t.Occurrence
使用此示例数据进行测试:
create table #temp1(Type varchar(10),Occurrence int)
insert into #temp1 VALUES('A',2)
insert into #temp1 VALUES('B',3)
如何创建数字表? http://sqlperformance.com/2013/01/t-sql-queries/generate-a-set-1
答案 1 :(得分:1)
如果您的表格中包含type
和num
列,则有两种方法。一种方法是使用递归CTE:
with CTE as (
select type, 0 as occurrence, num
from table t
union all
select type, 1 + occurrence, num
from cte
where occurrence + 1 < num
)
select cte.*
from cte;
如果数量超过100,您可能必须设置MAXRECURSION
选项。
另一种方法是加入数字表。 SQL Server为此目的使用spt_values
:
select s.number - 1 as occurrence, t.type
from table t join
spt_values s
on s.number <= t.num ;