SQL:如何将行转换为一个字段?

SQL:如何将行转换为一个字段?,sql,sql-server,Sql,Sql Server,作为标题 SQL: 从表中选择* 数据: 我需要以下结果: b field 17 Q:1,Z:9,G:5 18 Q:3 如何更改SQL语句? 谢谢 像这样: SELECT b, STUFF((select ', ' + c + ': ' + cast(d as varchar) FROM table xt WHERE xt.b = t.b FOR XML PATH('')), 1, 2, '') FROM table t GRO

作为标题

SQL:

从表中选择*

数据:

我需要以下结果:

b    field

17   Q:1,Z:9,G:5
18   Q:3
如何更改SQL语句? 谢谢

像这样:

SELECT  b, STUFF((select ', ' + c + ': ' + cast(d as varchar)
        FROM table xt
        WHERE xt.b = t.b
        FOR XML PATH('')), 1, 2, '')
FROM table t
GROUP BY b
1) 如果列
c
似乎是
[N][VAR]CHAR
列具有XML保留字符(例如
&
),则此解决方案将对这些字符进行编码,结果将包括
&
,而不是
&
(这只是一个示例)

输出:

T1
---------------------------------------
999100359916012598740083996400089999

T2
------------------------------
NULL
Arithmetic overflow occurred. <-- This is just an warning
T1
---------------------------------------
999100359916012598740083996400089999
T2
------------------------------
无效的
发生算术溢出。
SELECT 'AB1&2' FOR XML PATH('') 
-- AB1&amp;2
SELECT STUFF((SELECT 'AB1&2' FOR XML PATH('')), 1, 2, '') 
-- 1&amp;2 <- This time & remains encoded
SELECT STUFF((SELECT 'AB1&2' FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(100)'), 1, 2, '') 
-- 1&2 <- This time & is decoded
SET ANSI_WARNINGS OFF
SET ARITHABORT OFF
SELECT 9999.*9999.*9999.*9999.*9999.*9999.*9999.*9999.*9999. AS T1
SELECT CAST(9999.*9999.*9999.*9999.*9999.*9999.*9999.*9999.*9999 AS VARCHAR) AS T2
T1
---------------------------------------
999100359916012598740083996400089999

T2
------------------------------
NULL
Arithmetic overflow occurred. <-- This is just an warning
SELECT  x.b, STUFF(
            (SELECT ', ' + y.c + ': ' + cast(y.d as VARCHAR(50)) -- <- Please use the corect max. length
            FROM    dbo.MyTable y
            WHERE   y.b = x.b
            FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
        , 1, 2, '') AS GroupConcat
FROM    dbo.MyTable x
GROUP BY x.b