我正在尝试使用for XML函数来转移某些数据。我的数据如下:
VenNum_A VenNum_B
0001 0002
0001 0003
0001 0004
0005 0006
0005 0007
0005 0008
我试图获得以下结果:
venNum_A VenNum_B
0001 0002,0003,0004
0005 0006,0007,0008
我的代码到目前为止:
; with t as
(
select Distinct
A_VenNum, B_VenNum, SUM(1) as Cnt
From
#VenDups_Addr
Group by
A_VenNum, B_VenNum
)
select distinct
B_Vennum,
A_Vennum =cast(substring((
select distinct
[text()] = ', ' + t1.A_Vennum
from
t as t1
where
t.A_Vennum =t1.A_VenNum
for XML path('')
),3,99) as Varchar(254))
From t
目前,我的结果与选择两个原始字段没有什么不同。
此外,如果这不是达到我最终目标的最佳方法,我完全可以接受另一种解决方案,这是我知道这样做的唯一方法。
答案 0 :(得分:3)
尝试
Declare @t table(VenNum_A VARCHAR(10), VenNum_B VARCHAR(10))
Insert Into @t
Select '0001','0002' Union All Select '0001','0003' Union All Select '0001','0004' Union All
Select '0005','0006' Union All Select '0005','0007' Union All Select '0005','0008'
SELECT
VenNum_A
,VenNum_B = STUFF((Select ',' + CAST(VenNum_B AS VARCHAR(1000))
FROM @t t2
WHERE t1.VenNum_A = t2.VenNum_A
FOR XML PATh ('')
),1,1,'')
FROM @t t1
GROUP BY t1.VenNum_A
//结果
VenNum_A VenNum_B
0001 0002,0003,0004
0005 0006,0007,0008
希望这有帮助
答案 1 :(得分:0)
您是否知道CodePlex具有用户定义聚合 GROUP_CONCAT 的开源CLR实现。安装就像在服务器上运行SQL脚本一样简单。
http://groupconcat.codeplex.com/
它有4个group_concat实现
GROUP_CONCAT - 默认分隔符是,(逗号)
GROUP_CONCAT_D - 您可以指定分隔符
GROUP_CONCAT_DS - 您可以指定分隔符,排序顺序(1作为asc顺序,2作为desc顺序)
GROUP_CONCAT_S - 您可以指定排序顺序
在您的示例中,您将像这样使用它
SELECT VenNum_A
,dbo.GROUP_CONCAT(VenNum_B) AS VenNum_B
FROM YourTable
GROUP BY
VenNum_A