MSSQL 2012 - 如何将多行和多列组合成单行

时间:2015-12-08 15:31:19

标签: sql-server sql-server-2012

我的记录如下所示:

enter image description here

我想将所有多个行和列组合成单行:

109,0,0 | 123,1,1 | 174,0,0 | 321,0,0 ........

每一行组合将用管道分开,最后一行没有管道分隔符。

目前我正在使用MSSQL 2012.任何帮助都非常感谢。

2 个答案:

答案 0 :(得分:3)

这是一个使用xml的方法:

DECLARE @t TABLE
    (
      idno INT ,
     idfound INT, 
     pofound int
    )
INSERT  INTO @t VALUES
(109, 0, 0),
(123, 1, 1),
(174, 0, 0),
(321, 0, 0),
(456, 0, 1),
(509, 0, 0),
(654, 0, 1),
(687, 0, 1),
(789, 0, 0),
(987, 0, 0)

;WITH cte AS(SELECT CAST(idno AS VARCHAR(max)) + ',' + 
                    CAST(idfound AS VARCHAR(max)) + ',' + 
                    CAST(pofound AS VARCHAR(max)) AS col FROM @t)
SELECT STUFF((SELECT '|' + col FROM cte
              FOR XML PATH('')), 1, 1, '')

输出:

109,0,0|123,1,1|174,0,0|321,0,0|456,0,1|509,0,0|654,0,1|687,0,1|789,0,0|987,0,0

答案 1 :(得分:0)

DECLARE @Result VARCHAR(MAX) --To store the result

SELECT
    @Result = CONCAT(@Result+'|',CONCAT(idno,',',idfound,',',pofound))
FROM YourTable


SELECT @Result

在这里,我使用代码中的@Result+'|'来避免在第一行数据之前添加管道

输出

109,0,0|123,1,1|174,0,0|321,0,0|456,0,1|509,0,0|654,0,1|687,0,1|789,0,0|987,0,0

注意

CONCATNULL值视为空字符串,其中' +'运营商不会,因为我在查询中使用了两者