什么是格式化输出的TSQL语法,以便列值显示为字符串,用逗号分隔.
例如,我的表CARS具有以下内容:
CarID CarName
----------------
1 Porsche
2 Mercedes
3 Ferrari
Run Code Online (Sandbox Code Playgroud)
我如何获得汽车名称: Porsche, Mercedes, Ferrari
Lie*_*ers 64
SELECT LEFT(Car, LEN(Car) - 1)
FROM (
SELECT Car + ', '
FROM Cars
FOR XML PATH ('')
) c (Car)
Run Code Online (Sandbox Code Playgroud)
Con*_*lls 46
例如,您可以使用coalesce
连接表中记录的一系列字符串来创建快捷方式.
declare @aa varchar (200)
set @aa = ''
select @aa =
case when @aa = ''
then CarName
else @aa + coalesce(',' + CarName, '')
end
from Cars
print @aa
Run Code Online (Sandbox Code Playgroud)
Vai*_*v D 24
你可以用东西做到这一点:
SELECT Stuff(
(
SELECT ', ' + CARS.CarName
FROM CARS
FOR XML PATH('')
), 1, 2, '') AS CarNames
Run Code Online (Sandbox Code Playgroud)
gpa*_*kis 15
如果您在SQL Server 2017或Azure SQL数据库上运行,则执行以下操作:
SELECT STRING_AGG(CarName,',') as CarNames
FROM CARS
Run Code Online (Sandbox Code Playgroud)
Emr*_*gan 10
查询中的另一个解决方案:
select
Id,
STUFF(
(select (', "' + od.ProductName + '"')
from OrderDetails od (nolock)
where od.Order_Id = o.Id
order by od.ProductName
FOR XML PATH('')), 1, 2, ''
) ProductNames
from Orders o (nolock)
where o.Customer_Id = 525188
order by o.Id desc
Run Code Online (Sandbox Code Playgroud)
(编辑:感谢@ user007获取STUFF声明)
DECLARE @CarList nvarchar(max);
SET @CarList = N'';
SELECT @CarList+=CarName+N','
FROM dbo.CARS;
SELECT LEFT(@CarList,LEN(@CarList)-1);
Run Code Online (Sandbox Code Playgroud)
非常感谢SO上的任何人向我展示了在查询期间使用累积数据的情况.
请使用以下代码尝试一下:
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' , '') + CarName
FROM Cars
SELECT @listStr
Run Code Online (Sandbox Code Playgroud)
DECLARE @SQL AS VARCHAR(8000)
SELECT @SQL = ISNULL(@SQL+',','') + ColumnName FROM TableName
SELECT @SQL
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
118661 次 |
最近记录: |