복붙노트

[SQL] DB2에 회전식

SQL

DB2에 회전식

나는 DB2 table.This 내 테이블이 어떻게 구성되어 있는지입니다에서 열로 내 행을 바꾸어해야 ..

ItemID    Item    Value
---------------------
1     Meeting     Now
1     Advise      Yes
1     NoAdvise    No
2     Meeting     Never
2     Advise      No
2     NoAdvise    Null
2     Combine    Yes

나는 이것이 (내가 결합 트랜스 싶지 않아 주)로 전치 싶은

ItemID    Meeting  Advise   NoAdvise 
---------------------------------------
1         Now      Yes       No
2         Never    No        Null

비트 도움을 기쁘게 할 수 쿼리로 어려움을 겪고?

해결법

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

    1.그것은 아주 예쁜 아니지만, 그것을 작동합니다. DB2는 SQL 서버와 같은 PIVOT 내장 기능을 가지고 있지 않습니다.

    그것은 아주 예쁜 아니지만, 그것을 작동합니다. DB2는 SQL 서버와 같은 PIVOT 내장 기능을 가지고 있지 않습니다.

    SELECT DISTINCT
         A.ItemID
        ,(SELECT value
          FROM table B
          WHERE B.ItemID = A.ItemID
            AND B.Item   = 'Meeting'
        ) AS Meeting
        ,(SELECT value
          FROM table B
          WHERE B.ItemID = A.ItemID
            AND B.Item   = 'Advise'
        ) AS Advise
        ,(SELECT value
          FROM table B
          WHERE B.ItemID = A.ItemID
            AND B.Item   = 'NoAdvise'
        ) AS NoAdvise
    FROM table A
    
  2. ==============================

    2.bhamby에 의해 현재 허용 대답은 확실히 정확하지만 여러 상관 하위 쿼리를 사용하여가 훨씬 느린 하나의 그룹보다 경우 그것은 가치가 검사입니다 (힌트 : 그것은 가능성이 높습니다)

    bhamby에 의해 현재 허용 대답은 확실히 정확하지만 여러 상관 하위 쿼리를 사용하여가 훨씬 느린 하나의 그룹보다 경우 그것은 가치가 검사입니다 (힌트 : 그것은 가능성이 높습니다)

    SELECT 
      A.ItemID,
      MAX(CASE WHEN A.Item = 'Meeting'  THEN Value END) AS Meeting,
      MAX(CASE WHEN A.Item = 'Advise'   THEN Value END) AS Advise,
      MAX(CASE WHEN A.Item = 'NoAdvise' THEN Value END) AS NoAdvise
    FROM A
    GROUP BY A.ItemID
    

    또한 제 생각에 조금 간단

    (PostgreSQL을에, 그러나뿐만 아니라 DB2 LUW에 작품) SQLFiddle

  3. ==============================

    3.@bhamby 말했듯이, DB2는 PIVOT 기능이 없습니다. 대부분, 내 쿼리가 얼마나 결과가 검색됩니다 다릅니다 - 당신은 확실하게 그들을 프로파일 / 최적화를 실행해야 할 것입니다,하지만 난 상관 하위 쿼리 당 행 (잠재적으로 덜 효율적) 실행될 수 있다고 생각, 오히려 세트로보다. 이 작은 데이터 셋 이상 문제가되지 않을 수 있습니다.

    @bhamby 말했듯이, DB2는 PIVOT 기능이 없습니다. 대부분, 내 쿼리가 얼마나 결과가 검색됩니다 다릅니다 - 당신은 확실하게 그들을 프로파일 / 최적화를 실행해야 할 것입니다,하지만 난 상관 하위 쿼리 당 행 (잠재적으로 덜 효율적) 실행될 수 있다고 생각, 오히려 세트로보다. 이 작은 데이터 셋 이상 문제가되지 않을 수 있습니다.

    WITH Item (id) as (SELECT DISTINCT itemId
                       FROM YourTable),
    SELECT item.id, Meeting.meeting, Advise.advise, NoAdvise.noadvise
    FROM Item
    LEFT JOIN (SELECT itemId, value as meeting
               FROM YourTable
               WHERE item = 'Meeting') as Meeting
           ON Meeting.itemId = Item.id
    LEFT JOIN (SELECT itemId, value as advise
               FROM YourTable
               WHERE item = 'Advise') as Advise
           ON Advise.itemId = Item.id
    LEFT JOIN (SELECT itemId, value as noadvise
               FROM YourTable
               WHERE item = 'NoAdvise') as NoAdvise
           ON NoAdvise.itemId = Item.id
    

    (... 사실, 난 조금 당신이 부울 조건의 일종으로 나타납니다 모두 '조언'과 '어떤 조언'에 대한 열이 우려 해요 - 즉, 당신은 하나를 가지고 있지만, 다른 안) .

  4. from https://stackoverflow.com/questions/15529107/pivoting-in-db2 by cc-by-sa and MIT license