STUFF 函数在 SQL 服务器中以逗号分隔显示多列
STUFF function to display multiple columns with comma-separated in SQL Server
我需要在输出中以逗号分隔显示 table 列(假设 2 列)值
col1 Col2
================
xyz abc
pqr uvw
需要输出:
Col1 Col2
======== =======
xyz,pqr abc,uvw
我尝试了以下查询,但不确定如何将 col2 包含到以下查询中并将其作为单个查询:
SELECT
STUFF((SELECT DISTINCT ',' + CAST(t.Col1 AS VARCHAR(MAX))
FROM Table_1 t
FOR XML PATH('')), 1, 1, '')
这是一种可能的方法:
Table:
CREATE TABLE Data (
col1 nvarchar(50),
col2 nvarchar(50)
)
INSERT INTO Data
(col1, col2)
VALUES
(N'xyz', N'abc'),
(N'pqr', N'uvw')
声明:
SELECT
Col1 = STUFF((SELECT CONCAT(',', col1) FROM Data FOR XML PATH(''),TYPE).value(N'.','nvarchar(max)'), 1, 1, ''),
Col2 = STUFF((SELECT CONCAT(',', col2) FROM Data FOR XML PATH(''),TYPE).value(N'.','nvarchar(max)'), 1, 1, '')
结果:
Col1 Col2
xyz,pqr abc,uvw
备注:
如果你使用 SQL Server 2017+,你可以使用 STRING_AGG()
:
SELECT
STRING_AGG(col1, N',') AS col1,
STRING_AGG(col2, N',') AS col2
FROM Data
MS SQL Server 2017 架构设置:
create table MyTable(ColA varchar(max),ColB varchar(max))
INSERT INTO MyTable(ColA,ColB)VALUES('xyz','abc')
INSERT INTO MyTable(ColA,ColB)VALUES('pqr','uvw')
查询 1:
SELECT STUFF((select ',' + cast(t.ColA as varchar(max))
from MyTable t
for xml path ('')
), 1, 1, '') AS ColA,
STUFF((select ',' + cast(t.ColB as varchar(max))
from MyTable t
for xml path ('')
), 1, 1, '') AS ColB
查询 2 :
SELECT
STRING_AGG(colA, ',') AS colA,
STRING_AGG(colB, ',') AS colB
FROM MyTable
| ColA | ColB |
|---------|---------|
| xyz,pqr | abc,uvw |
我需要在输出中以逗号分隔显示 table 列(假设 2 列)值
col1 Col2
================
xyz abc
pqr uvw
需要输出:
Col1 Col2
======== =======
xyz,pqr abc,uvw
我尝试了以下查询,但不确定如何将 col2 包含到以下查询中并将其作为单个查询:
SELECT
STUFF((SELECT DISTINCT ',' + CAST(t.Col1 AS VARCHAR(MAX))
FROM Table_1 t
FOR XML PATH('')), 1, 1, '')
这是一种可能的方法:
Table:
CREATE TABLE Data (
col1 nvarchar(50),
col2 nvarchar(50)
)
INSERT INTO Data
(col1, col2)
VALUES
(N'xyz', N'abc'),
(N'pqr', N'uvw')
声明:
SELECT
Col1 = STUFF((SELECT CONCAT(',', col1) FROM Data FOR XML PATH(''),TYPE).value(N'.','nvarchar(max)'), 1, 1, ''),
Col2 = STUFF((SELECT CONCAT(',', col2) FROM Data FOR XML PATH(''),TYPE).value(N'.','nvarchar(max)'), 1, 1, '')
结果:
Col1 Col2
xyz,pqr abc,uvw
备注:
如果你使用 SQL Server 2017+,你可以使用 STRING_AGG()
:
SELECT
STRING_AGG(col1, N',') AS col1,
STRING_AGG(col2, N',') AS col2
FROM Data
MS SQL Server 2017 架构设置:
create table MyTable(ColA varchar(max),ColB varchar(max))
INSERT INTO MyTable(ColA,ColB)VALUES('xyz','abc')
INSERT INTO MyTable(ColA,ColB)VALUES('pqr','uvw')
查询 1:
SELECT STUFF((select ',' + cast(t.ColA as varchar(max))
from MyTable t
for xml path ('')
), 1, 1, '') AS ColA,
STUFF((select ',' + cast(t.ColB as varchar(max))
from MyTable t
for xml path ('')
), 1, 1, '') AS ColB
查询 2 :
SELECT
STRING_AGG(colA, ',') AS colA,
STRING_AGG(colB, ',') AS colB
FROM MyTable
| ColA | ColB |
|---------|---------|
| xyz,pqr | abc,uvw |