복붙노트

[SQL] 1 개 이상의 값을 가진 열을 PIVOT 행이 반환

SQL

1 개 이상의 값을 가진 열을 PIVOT 행이 반환

나는 현재과 같이 설정이 개 테이블이 시스템 작업입니다 :

Table_1
-------
ID
Table2ID
Value



Table_2
--------
ID
ColumnName

각 테이블의 일부 모의 결과 :

Table_1

Table2ID   |   Value
---------------
1          |   ABCD
1          |   EFGH
1          |   IJKL
2          |   MNOP
2          |   QRST
2          |   UVWX


Table_2

ID   |   ColumnName
--------------------
1    |   First_Set
2    |   Second_Set

그래서 나는 열로 Table_2의 행의 결과를 돌리려고하면, 다음 쿼리를

SELECT *
FROM(
SELECT B.ColumnName, A.Value
FROM Table_1 AS A 
     INNER JOIN Table_2 AS B ON A.Table2ID = B.ID
     ) AS P
   PIVOT
   (
       min(P.Value)
       for P.ColumnName in ([First_Set], [Second_Set])
   ) AS PIV

문제는이 쓰여, 나는이 하나의 결과를 다시 얻을, 그입니다. 내 반환되는 값은 다음과 같이 될 것이다 :

    First_Set  |  Second_Set
    -------------------------
    ABCD       |  MNOP

내가 원하는 모든 각 열에 대한 결과입니다,하지만 난 내가 그렇게 할 수 있습니다 PIVOT을 사용하는 방법을 찾을 수 없어.

사람이 행을 열로 설정하는 가장 좋은 방법에 대한 제안이 각 컬럼에 대해 여러 결과를받을 다음합니까?

해결법

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

    1.PIVOT은 귀하의 경우 귀하의 질의에 First_Set 및 Second_Set에 대해 하나의 값을 반환합니다, 최소 기능을 사용하고, 결과를 얻을 수 집계 함수의 사용을 필요로한다. 나는 PIVOT을 적용 할 때 별개의 행을 유지하는 데 사용되는 열을 포함하여 건의 할 것입니다.

    PIVOT은 귀하의 경우 귀하의 질의에 First_Set 및 Second_Set에 대해 하나의 값을 반환합니다, 최소 기능을 사용하고, 결과를 얻을 수 집계 함수의 사용을 필요로한다. 나는 PIVOT을 적용 할 때 별개의 행을 유지하는 데 사용되는 열을 포함하여 건의 할 것입니다.

    데이터, 나는 세트의 각 항목에 대해 고유 한 값을 생성하는 ROW_NUMBER ()를 사용하는 것이 좋습니다 것입니다. 이 값은 다음 PIVOT의 그룹화 측면에서 사용됩니다 :

    SELECT [First_Set], [Second_Set]
    FROM
    (
      SELECT B.ColumnName, A.Value
        , row_number() over(partition by a.Table2ID
                            order by a.Value) seq
      FROM Table_1 AS A 
      INNER JOIN Table_2 AS B 
        ON A.Table2ID = B.ID
    ) AS P
    PIVOT
    (
      min(P.Value)
      for P.ColumnName in ([First_Set], [Second_Set])
    ) AS PIV;
    

    데모와 SQL 바이올린을 참조하십시오. 이 결과를 줄 것이다 :

    | FIRST_SET | SECOND_SET |
    |      ABCD |       MNOP |
    |      EFGH |       QRST |
    |      IJKL |       UVWX |
    
  2. from https://stackoverflow.com/questions/18851588/pivot-rows-to-columns-with-more-than-1-value-returned by cc-by-sa and MIT license