복붙노트

[SQL] 어떻게 거래 / SQL에서 피벗 테이블을 만드는 방법?

SQL

어떻게 거래 / SQL에서 피벗 테이블을 만드는 방법?

내 소스 데이터 테이블은

MemID Condition_ID Condtion_Result
----------------------------------
1     C1           0
1     C2           0
1     C3           0
1     C4           1
2     C1           0
2     C2           0
2     C3           0
2     C4           0

내가 만들려는 예상보기는 ....입니다

MemID C1 C2 C3 C4
------------------
1     1  0  0  1
2     0  0  0  1

여기에 다른 조건이다. 상기 소스에 나타난 예에서, 주어진 MemID 만 4 행. 이 숫자는 실제 상황에서 달라질 수 있습니다. 내 피벗 테이블 (또는 다른 솔루션은) 그것을 조건 결과의 수를 선택하고 열로 표시되어야합니다. 그것을 어떻게?

해결법

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

    1.당신은 PIVOT를 사용해야합니다. 당신이 열은 실행 시간까지 알 수없는 변환 할 수있는 컬럼의 값 또는 동적 PIVOT을 알고 어디 정적 PIVOT을 사용할 수 있습니다.

    당신은 PIVOT를 사용해야합니다. 당신이 열은 실행 시간까지 알 수없는 변환 할 수있는 컬럼의 값 또는 동적 PIVOT을 알고 어디 정적 PIVOT을 사용할 수 있습니다.

    정적 피벗 (데모와 참조 SQL 바이올린) :

    select *
    from 
    (
        select memid, Condition_id, Condition_Result
        from t
    ) x
    pivot
    (
        sum(condition_result)
        for condition_id in ([C1], [C2], [C3], [C4])
    ) p
    

    동적 피벗 (데모와 참조 SQL 바이올린) :

    DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX)
    
    SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.condition_id) 
                FROM t c
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    
    set @query = 'SELECT memid, ' + @cols + ' from 
                (
                    select MemId, Condition_id, condition_result
                    from t
               ) x
                pivot 
                (
                    sum(condition_result)
                    for condition_id in (' + @cols + ')
                ) p '
    
    
    execute(@query)
    

    둘 다 동일한 결과를 생성합니다.

  2. from https://stackoverflow.com/questions/11617713/how-to-create-a-pivottable-in-transact-sql by cc-by-sa and MIT license