developer tip

열 값을 쉼표로 구분 된 목록으로 연결

copycodes 2020. 12. 28. 08:25
반응형

열 값을 쉼표로 구분 된 목록으로 연결


열 값이 쉼표로 구분 된 문자열로 표시되도록 출력 형식을 지정하는 TSQL 구문은 무엇입니까?

예를 들어, 내 테이블 CARS에는 다음이 있습니다.

CarID    CarName  
----------------
    1    Porsche  
    2    Mercedes  
    3    Ferrari  

자동차 이름을 어떻게 얻습니까? Porsche, Mercedes, Ferrari


coalesce예를 들어 테이블의 레코드에서 일련의 문자열을 연결하는 데 사용하는 바로 가기를 수행 할 수 있습니다 .

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

SQL Server 2017 또는 Azure SQL Database에서 실행중인 경우 다음과 같이합니다.

 SELECT STRING_AGG(CarName,',') as CarNames
 FROM CARS 

쿼리 내의 또 다른 솔루션 :

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

(편집 : STUFF 선언에 대해 @ user007에게 감사드립니다)


DECLARE @CarList nvarchar(max);
SET @CarList = N'';
SELECT @CarList+=CarName+N','
FROM dbo.CARS;
SELECT LEFT(@CarList,LEN(@CarList)-1);

감사는 누가 쿼리 중에 데이터 누적 사용을 보여준 사람에게 기인합니다.


 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

참조 URL : https://stackoverflow.com/questions/1048209/concatenating-column-values-into-a-comma-separated-list

반응형