복붙노트

[SQL] (SQL Server에 대한 GROUP_CONCAT a.k.a)를 CSV로 병합 행 값

SQL

(SQL Server에 대한 GROUP_CONCAT a.k.a)를 CSV로 병합 행 값

나는 테이블 등이 있습니다 :

EntityID   AttributeID  OptionText
5016       20           Paintings
5044       18           Female
5060       48           M
5060       48           F
5060       49           Apple
5060       49           Banana
5060       49           Cat

나는 보여줄 것이다 뷰를 만들려면 :

5016    20   Paintings
5044    18   Female
5060    48   M,F
5060    49   Apple, Banana, Cat

의미는 모든 엔터티 값은 쉼표로 구분하여 표시되어야 속성.

옵션의 수는 변화 될 수있다.

어떤 도움에 감사드립니다!

해결법

  1. ==============================

    1.에는 EntityID의 각 쌍의 경우,의 AttributeId는 CSV를 생성하기 위해 XML 경로 트릭을 사용

    에는 EntityID의 각 쌍의 경우,의 AttributeId는 CSV를 생성하기 위해 XML 경로 트릭을 사용

     SELECT
        M.EntityID, M.AttributeID,
        SUBSTRING(CAST(foo.bar AS varchar(8000)), 2, 7999) AS Options
    FROM
        (
        SELECT DISTINCT EntityID, AttributeID
        FROM MyTable
        ) M
        CROSS APPLY
        (
        SELECT
            ',' + OptionText
        FROM
            MyTable M2
        WHERE
            M.EntityID = M2.EntityID AND M.AttributeID= M2.AttributeID
        FOR XML PATH ('')
        ) foo(bar)
    
  2. ==============================

    2.아래의 코드를 (라이브 데이터에 연습을하지 않아도 내가 모든 테스트 SQL을 포함 시켰습니다)보십시오. 현재 작업 예제를 볼 수 있습니다 http://data.stackexchange.com/stackoverflow/q/115141/

    아래의 코드를 (라이브 데이터에 연습을하지 않아도 내가 모든 테스트 SQL을 포함 시켰습니다)보십시오. 현재 작업 예제를 볼 수 있습니다 http://data.stackexchange.com/stackoverflow/q/115141/

    --Set up test table
    CREATE TABLE #Table1 (EntityID INT, AttributeID INT, OptionText VARCHAR(50))
    
    INSERT INTO #Table1
    SELECT  5030, 48, 'M'
    
    INSERT INTO #Table1
    SELECT  5030, 48, 'F'
    
    --Begin actual working SQL          
    SELECT      T1.EntityID,
                T1.AttributeID,
                STUFF(( SELECT    ', ' + T2.OptionText
                        FROM      #Table1 T2
                        WHERE     T2.AttributeID = T1.AttributeID
                        AND       T2.EntityID = T1.EntityID
                        FOR XML PATH('')
                      ), 1, 2, '') [Attributes]
    FROM        #Table1 T1
    GROUP BY    T1.EntityID, T1.AttributeID
    
    DROP TABLE #Table1
    
  3. ==============================

    3.나는 3 개 가지 방법과 몇 가지 테스트를 수행했다 :

    나는 3 개 가지 방법과 몇 가지 테스트를 수행했다 :

    http://blog.feronovak.com/2011/10/multiple-values-in-one-column-aka.html

    희망이 도움이.

  4. from https://stackoverflow.com/questions/7755815/merge-row-values-into-a-csv-a-k-a-group-concat-for-sql-server by cc-by-sa and MIT license