복붙노트

[SQL] SQL 서버의 칼럼에서 변환 행 값 (PIVOT)

SQL

SQL 서버의 칼럼에서 변환 행 값 (PIVOT)

나는 SQL Server의 테이블은 테스트 3 열을 가진 불렀다

|  ITEM | ATTRIBUTE | VALUE |
-----------------------------
| item1 |   Quality |     A |
| item1 |     color |   Red |
| item2 |   Quality |     B |
| item2 |     color | Black |

이 같은 출력을합니다 :

|  ITEM | QUALITY | COLOR |
---------------------------
| item1 |       A |   Red |
| item2 |       B | Black |

어떻게 SQL 서버에이를 얻을 수 있습니다.

해결법

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

    1.이거 한번 해봐:

    이거 한번 해봐:

    SELECT *
    FROM (SELECT Item, attribute, value FROM MyTable) AS t
    PIVOT
    (
      MAX(value)
      FOR attribute IN([Quality], [Color])
    ) AS p;
    

    산출:

    ╔═══════╦═════════╦═══════╗
    ║ ITEM  ║ QUALITY ║ COLOR ║
    ╠═══════╬═════════╬═══════╣
    ║ item1 ║ A       ║ Red   ║
    ║ item2 ║ B       ║ Black ║
    ╚═══════╩═════════╩═══════╝
    

    당신은 속성의 특정 값을 모르는 경우에도이 동적 쿼리를 사용할 수 있습니다 :

    DECLARE @cols AS NVARCHAR(MAX), @query  AS NVARCHAR(MAX)
    
    select @cols = STUFF((SELECT distinct ',' + QUOTENAME(attribute) 
                        from MyTable
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    
    set @query = 'SELECT Item,' + @cols + ' 
                 from 
                 (
                    Select Item, attribute , value
                    from MyTable
                 ) dta
                 pivot 
                 (
                    MAX(Value)
                    for attribute in (' + @cols + ')
                 ) pvt '
    
    execute(@query);
    
  2. ==============================

    2.이 PIVOT이 작동하지 않는 MySQL을위한 해키 솔루션의 비트입니다.

    이 PIVOT이 작동하지 않는 MySQL을위한 해키 솔루션의 비트입니다.

    select item, GROUP_CONCAT('',q) as Quantity, GROUP_CONCAT('',c) as Color from 
    (select item ,CASE WHEN attribute = 'Quality' THEN value ELSE NULL END as q, CASE WHEN attribute = 'Color' THEN value ELSE NULL END as c 
     from MyTable
    ) temp 
    group by item
    

    이 솔루션과 함께 문제는 속성 열의 모든 고유 값을 알아야한다는 것입니다.

    당신은 여기를 시도 할 수 있습니다.

  3. from https://stackoverflow.com/questions/16916470/convert-row-value-in-to-column-in-sql-server-pivot by cc-by-sa and MIT license