可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
What is the TSQL syntax to format my output so that the column values appear as a string, seperated by commas.
Example, my table CARS has the following:
CarID CarName ---------------- 1 Porsche 2 Mercedes 3 Ferrari
How do I get the car names as : Porsche, Mercedes, Ferrari
回答1:
You can do a shortcut using coalesce
to concatenate a series of strings from a record in a table, for example.
declare @aa varchar (200) set @aa = '' select @aa = case when @aa = '' then CarName else @aa + coalesce(',' + CarName, '') end from Cars print @aa
回答2:
SELECT LEFT(Car, LEN(Car) - 1) FROM ( SELECT Car + ', ' FROM Cars FOR XML PATH ('') ) c (Car)
回答3:
You can do this using stuff:
SELECT Stuff( ( SELECT ', ' + CARS.CarName FROM CARS FOR XML PATH('') ), 1, 2, '') AS CarNames
回答4:
If you are running on SQL Server 2017 or Azure SQL Database you do something like this :
SELECT STRING_AGG(CarName,',') as CarNames FROM CARS
回答5:
DECLARE @CarList nvarchar(max); SET @CarList = N''; SELECT @CarList+=CarName+N',' FROM dbo.CARS; SELECT LEFT(@CarList,LEN(@CarList)-1);
Thanks are due to whoever on SO showed me the use of accumulating data during a query.
回答6:
Another solution within a query :
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
(EDIT: thanks @user007 for the STUFF declaration)
回答7:
DECLARE @SQL AS VARCHAR(8000) SELECT @SQL = ISNULL(@SQL+',','') + ColumnName FROM TableName SELECT @SQL
回答8:
Please try this with the following code:
DECLARE @listStr VARCHAR(MAX) SELECT @listStr = COALESCE(@listStr+',' , '') + CarName FROM Cars SELECT @listStr