在字符串上运行连接

时间:2015-06-03 11:12:06

标签: sql-server sql-server-2008

    Column1  Column2  Column3  Column4
    WEST     WHEAT    0        abc
    WEST     WHEAT    0        def
    WEST     WHEAT    1        ghi
    WEST     WHEAT    1        jkl
    WEST     WHEAT    2        mno
    WEST     WHEAT    2        pqr

上表中的数据基于列Column1,Column2和Column3进行分组, 和Column4必须连接。

预期的连接Column4输出如下:

abc,def
abc,def,ghi,jkl
abc,def,ghi,jkl,mno,pqr

使用以下代码将Column4值连接起来

    STUFF((SELECT DISTINCT ',' + "Column4" FROM "Query2" Q2 WHERE Q1."Column1"=Q2."Column1" and MainQuery."Column2"=Q2."Column2" AND MainQuery."Column3"=Q2."Column3"  for xml path('')),1,1,'')

但所取得的成果是:

abc,def
ghi,jkl
mno,pqr

以前的组值必须与当前组值连接。

任何人都可以帮助实现SQL Server中的预期输出。

1 个答案:

答案 0 :(得分:0)

您可以将MainQuery."Column3" = Q2."Column3"更改为MainQuery."Column3" >= Q2."Column3"

因此,您的联合相关查询将变为

 STUFF((SELECT DISTINCT ',' + "Column4" FROM "Query2" Q2 WHERE Q1."Column1"=Q2."Column1" and MainQuery."Column2"=Q2."Column2" AND MainQuery."Column3" >= Q2."Column3"  for xml path('')),1,1,'')

这将获得相同Column3Column1

的上一个和当前Column2