将列值连接到逗号分隔列表中
什么是TSQL语法格式化我的输出,以便列值显示为一个string,由逗号分隔。
例如,我的表CARS有以下几个:
CarID CarName ---------------- 1 Porsche 2 Mercedes 3 Ferrari
我如何获得汽车名称: Porsche, Mercedes, Ferrari
例如,可以使用coalesce
来连接表中logging的一系列string。
declare @aa varchar (200) set @aa = '' select @aa = case when @aa = '' then CarName else @aa + coalesce(',' + CarName, '') end from Cars print @aa
SELECT LEFT(Car, LEN(Car) - 1) FROM ( SELECT Car + ', ' FROM Cars FOR XML PATH ('') ) c (Car)
你可以用这个东西来做
SELECT Stuff( ( SELECT ', ' + CARS.CarName FROM CARS FOR XML PATH('') ), 1, 2, '') AS CarNames
DECLARE @CarList nvarchar(max); SET @CarList = N''; SELECT @CarList+=CarName+N',' FROM dbo.CARS; SELECT LEFT(@CarList,LEN(@CarList)-1);
非常感谢谁在SO上向我展示了在查询过程中使用累积数据的情况。
查询中的另一个解决scheme:
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
(编辑:感谢@ user007为STUFF声明)
如果您在SQL Server 2017或Azure SQL数据库上运行,则可以这样做:
SELECT STRING_AGG(CarName,',') as CarNames FROM CARS
DECLARE @SQL AS VARCHAR(8000) SELECT @SQL = ISNULL(@SQL+',','') + ColumnName FROM TableName SELECT @SQL
请用下面的代码试试这个:
DECLARE @listStr VARCHAR(MAX) SELECT @listStr = COALESCE(@listStr+',' , '') + CarName FROM Cars SELECT @listStr