SQL:
SELECT * FROM表
數據:
id b c d
4 17 Q 1
5 17 Z 9
6 17 G 5
7 18 Q 3
我需要以下結果:
b field
17 Q:1,Z:9,G:5
18 Q:3
我該如何更改SQL語句? 謝謝!
SQL:
SELECT * FROM表
數據:
id b c d
4 17 Q 1
5 17 Z 9
6 17 G 5
7 18 Q 3
我需要以下結果:
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)如果這似乎是一個[N][VAR]CHAR
柱柱c
具有XML保留字符(爲例&
)然後將此溶液將編碼這些字符,並且結果將包括&
代替&
(這只是一個例子)。
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
2)最好定義最大值。當使用可變長度類型([N][VAR]CHAR
,NUMERIC/DECIMAL
等)時,可以避免使用長度,精度和縮放比例,這些類型的長度,精度和比例可能會導致不希望的截斷/舍入。
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
3)
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
什麼是你的DBMS? –
我使用SQL服務器 –