복붙노트

[SQL] 피벗 2000 SQL Server를 사용하여

SQL

피벗 2000 SQL Server를 사용하여

나는 함께 내 문제의 샘플 시나리오를 넣고 내가 올바른 방향으로 날 가리 키도록 누군가를 위해 그 정도를 바랍니다.

나는 두 개의 테이블이

제품

Prodost 후

나는 다음의 결과 세트를 필요

해결법

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

    1.우리는 성공적으로 과거에 다음과 같은 방법을 사용했습니다 ...

    우리는 성공적으로 과거에 다음과 같은 방법을 사용했습니다 ...

    SELECT [p].ProductID,
           [p].Name,
           MAX(CASE [m].MetaKey
                 WHEN 'A'
                   THEN [m].MetaValue
               END) AS A,
           MAX(CASE [m].MetaKey
                 WHEN 'B'
                   THEN [m].MetaValue
               END) AS B,
           MAX(CASE [m].MetaKey
                 WHEN 'C'
                   THEN [m].MetaValue
               END) AS C
    FROM   Products [p]
           INNER JOIN ProductMeta [m]
             ON [p].ProductId = [m].ProductId
    GROUP  BY [p].ProductID,
              [p].Name 
    

    또한의 사용과 유용한 이조 집계 할 수 있습니다 ...

    SUM(CASE x WHEN 'y' THEN yVal ELSE 0 END) AS SUMYVal
    

    편집하다

    또한 가치는이 ANSI 표준 SQL을 사용하고 플랫폼에서 작동 할 수 있도록되어 지적 :)

  2. ==============================

    2.나는이 두 살 실감하지만, 버그 나 그 동적 SQL 사용에 대한 허용 대답 전화와 가장 upvoted 답변을하지 않습니다 일 :

    나는이 두 살 실감하지만, 버그 나 그 동적 SQL 사용에 대한 허용 대답 전화와 가장 upvoted 답변을하지 않습니다 일 :

    Select P.ProductId, P.Name
        , Min( Case When PM.MetaKey = 'A' Then PM.MetaValue End ) As A
        , Min( Case When PM.MetaKey = 'B' Then PM.MetaValue End ) As B
        , Min( Case When PM.MetaKey = 'C' Then PM.MetaValue End ) As C
    From Products As P
            Join ProductMeta As PM
                On PM.ProductId = P.ProductId
    Group By P.ProductId, P.Name
    

    당신은 그룹에 의해를 사용해야하거나 지그재그 결과를 얻을 것이다. 당신이 그룹에 의해를 사용하는 경우, 당신은 집계 함수에 GROUP BY 절에는 없습니다 각 열 (또는 하위 쿼리)를 포장해야합니다.

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

    3.데이터베이스 엔진이 2005이고, 데이터베이스가 2000 호환성 모드에있는 경우, 당신은 2005 데이터베이스에서 쿼리를 실행하여 하위 호환 모드를 해결할 수 있습니다. 같은 DatabaseNameHere.dbo.TableNameHere 같이 쿼리에 테이블 3 부분 명명 규칙을 사용하여 2000 데이터베이스를 대상

    데이터베이스 엔진이 2005이고, 데이터베이스가 2000 호환성 모드에있는 경우, 당신은 2005 데이터베이스에서 쿼리를 실행하여 하위 호환 모드를 해결할 수 있습니다. 같은 DatabaseNameHere.dbo.TableNameHere 같이 쿼리에 테이블 3 부분 명명 규칙을 사용하여 2000 데이터베이스를 대상

  4. ==============================

    4.

    Select a.ProductId
      ,a.Name
      ,(Select c.MetaValue
        From [Product Meta] c
        Where c.ProductId = a.ProductId
        And c.MetaKey = 'A') As 'A'
       ,(Select d.MetaValue
        From [Product Meta] d
        Where d.ProductId = a.ProductId
        And d.MetaKey = 'B') As 'B'
       ,(Select e.MetaValue
          From [Product Meta] e
          Where e.ProductId = a.ProductId
          And e.MetaKey = 'C') As 'C'
    From Products a
    Order By a.ProductId Asc
    
  5. ==============================

    5.여기에 저장 프로 시저를 사용 : http://www.sqlteam.com/article/dynamic-cross-tabs-pivot-tables

    여기에 저장 프로 시저를 사용 : http://www.sqlteam.com/article/dynamic-cross-tabs-pivot-tables

    또한 주석을 확인합니다.

  6. from https://stackoverflow.com/questions/312861/pivot-using-sql-server-2000 by cc-by-sa and MIT license