2016-01-13 57 views
1

創建多個行我有一個名爲Test1的表如下:分區通過使用與分裂值在SQL

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列的值。 任何幫助將非常可觀。

+0

你想'SUM(1)OVER(PARTITION BY A)',而不是'SUM(C)'。或者,'COUNT(*)OVER ...'而不是'SUM(1)OVER ...'。 – ZLK

+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。