分区通过使用并拆分值以在SQL中创建多个行

时间:2016-01-13 03:40:12

标签: sql sql-server

我有一个名为 Test1 的表格如下:

A         B                C
One     ABC,DEF,GHI,JKL    4
Two     AAA,GGG,RTG        3
Three   A,B,C,D            4
One                        0
Two     TE,YT              2

我想要输出如下:

A     B      C
One   ABC     6
One   DEF     6
One   GHI     6
One   JKL     6
One           6
Three   A     4
Three   B     4
Three   C     4
Three   D     4
Two           7
Two     AAA   7
Two     GGG   7
Two     RTG   7

我尝试了以下查询但是我在输出中出现问题,分区为。

SELECT A,SUM(C) OVER (PARTITION BY A),left(d, charindex(',', d + ',')-1) as "B" from 
            (SELECT *, substring(B, number, 3000) as d from Test1 A left join
             (SELECT distinct number from master.dbo.spt_values where number between 1 and 200) B
              on substring(',' + B, number, 1) = ',') t

使用上面我得到以下内容:

A     C     B
One   18    ABC
One   18    DEF
One   18    GHI
One   18    JKL
One   18    
Three 16    A
Three 16    B
Three 16    C
Three 16    D
Two   13    
Two   13    AAA
Two   13    GGG
Two   13    RTG

我正在尝试为B列中的多个条目创建行,并使用逗号分隔,并根据组添加C列值。 任何帮助都会非常值得赞赏。

1 个答案:

答案 0 :(得分:0)

只需在网上寻找一个split()功能(你可以通过谷歌搜索“sql server split”得到一堆点击。)。

然后你可以做类似的事情:

select t.a, t.c, s.b
from test t outer apply
     dbo.split(t.b) as s(b);

还有其他方法。 。 。使用XML或使用递归CTE。