SQL:如何将行转换为一个字段?
作为标题 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
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&2
SELECT STUFF((SELECT 'AB1&2' FOR XML PATH('')), 1, 2, '')
-- 1&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