生成SQL行

时间:2014-09-25 12:54:42

标签: sql tsql

鉴于每种类型有多种类型和多次出现,我想在T-SQL中生成类似的内容:

Occurrence | Type
-----------------
         0 | A
         1 | A
         0 | B
         1 | B
         2 | B

每种类型的类型数和出现次数都表示为不同表中的值。

虽然我可以使用WHILE循环执行此操作,但我正在寻找更好的解决方案。

谢谢!

2 个答案:

答案 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)

如果您的表格中包含typenum列,则有两种方法。一种方法是使用递归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 ;