SQL Server:将一行拆分为多行(值)

时间:2018-12-20 00:41:27

标签: sql sql-server

例如,我有

Select * from mytable

enter image description here

我需要拥有

enter image description here

请帮助:)

2 个答案:

答案 0 :(得分:2)

我喜欢为此目的使用递归CTE:

A

如果您的数据不是太大,那么性能应该很好。如果数据量较大,则可能需要考虑数字表。

答案 1 :(得分:0)

您可以尝试以下查询

create table #temp (name varchar(20),name2 varchar(20), value int)
insert into #temp values ('aaaa', 'bbbb', 10),('afb', 'bgr', 4)


;WITH
  expanded
AS
(
  SELECT name, name2, value FROM #temp

UNION ALL

  SELECT name, name2, value - 1 FROM expanded WHERE value > 1
)

SELECT
  name, name2, 1 as value,
  ROW_NUMBER() OVER (ORDER BY name, name2, value) AS unique_ref
FROM
  expanded
ORDER BY
  name, 
  name2,
  value

输出如下所示

name    name2   value   unique_ref
aaaa    bbbb    1       1
aaaa    bbbb    1       2
aaaa    bbbb    1       3
aaaa    bbbb    1       4
aaaa    bbbb    1       5
aaaa    bbbb    1       6
aaaa    bbbb    1       7
aaaa    bbbb    1       8
aaaa    bbbb    1       9
aaaa    bbbb    1       10
afb     bgr     1       11
afb     bgr     1       12
afb     bgr     1       13
afb     bgr     1       14

您可以在此处找到演示-Demo