복붙노트

[SQL] 에서의 SQL 서버 방법 피벗에 여러 컬럼

SQL

에서의 SQL 서버 방법 피벗에 여러 컬럼

이것은 내 샘플 표, 난 범주 열을 돌리 행과 판매, 재고 및 대상을 얻으려면

카테고리는 행 대신에 열 및 열 대신에, 상기 아래에 도시 된 바와 같이, 이런 형태의 샘플을 출력 할

해결법

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

    1.샘플 테이블 :

    샘플 테이블 :

    DECLARE @Table1 TABLE 
        (Branch varchar(9), Category varchar(9), Sales INT,Stock INT,Target INT)
    ;
    
    INSERT INTO @Table1
        (Branch, Category, Sales, Stock,Target)
    VALUES
        ( 'mumbai', 'panel', 10,4,15),
        ( 'mumbai', 'AC', 11,7,14),
        ( 'mumbai', 'Ref', 7,2,10),
        ( 'Delhi', 'panel',20,4,17),
        ( 'Delhi', 'AC', 5,2,12),
        ( 'Delhi', 'Ref', 10,12,22)
    ;
    

    IN SQL 서버 스크립트 :

      Select BRANCH,COL,[panel],[AC],[Ref] from (
        select Branch,Category,COL,VAL from @Table1
        CROSS APPLY (VALUES ('Sales',Sales),
        ('Stock',Stock),
        ('Target',Target))CS (COL,VAL))T
        PIVOT (MAX(VAL) FOR Category IN ([panel],[AC],[Ref]))PVT
    ORDER BY Branch DESC
    
  2. ==============================

    2.당신은 다음 피벗 문에 열 이름을 변경 해.

    당신은 다음 피벗 문에 열 이름을 변경 해.

    처럼

    SELECT
    *
    FROM
    (
      SELECT 
       Branch,
       Category,
       Category+'1' As Category1,
       Category+'2' As Category2,
       Sales, 
       Stock, 
       Target
      FROM TblPivot
     ) AS P
    
     -- For Sales
     PIVOT
     (
       SUM(Sales) FOR Category IN ([Panel], [AC], [Ref])
     ) AS pv1
    
     -- For Stock
     PIVOT
     (
       SUM(Stock) FOR Category1 IN ([Panel1], [AC1], [Ref1])
     ) AS pv2
    
     -- For Target
     PIVOT
     (
       SUM(Target) FOR Category2 IN ([Panel2], [AC2], [Ref2])
     ) AS pv3
     GO
    

    이제 갈 준비가 ....

    당신은 당신이 필요로하는 열을 기준으로 합 그룹에 PV3의 집계를 사용할 수 있습니다.

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

    3.솔루션 아래에보십시오

    솔루션 아래에보십시오

      -- Applying pivoting on multiple columns
    SELECT
    *
    FROM
    (
      SELECT 
       Category,
       Sales, 
      FROM TblPivot
     ) AS P
    
     -- For Sales
     PIVOT
     (
       SUM(Sales) FOR Category IN ([Panel], [AC], [Ref])
     ) AS pv1
    
    union all
    
     -- For Stock
     SELECT
    *
    FROM
    (
      SELECT 
       Category,
       Stock, 
      FROM TblPivot
     ) AS P
    
     PIVOT
     (
       SUM(Stock) FOR Category IN ([Panel], [AC], [Ref])
     ) AS pv2
    
    union all
    
     -- For Target
     SELECT
    *
    FROM
    (
      SELECT 
       Category,
       Target, 
      FROM TblPivot
     ) AS P
    
     PIVOT
     (
       SUM(Target) FOR Category IN ([Panel], [AC], [Ref])
     ) AS pv3
     GO
    
  4. ==============================

    4.다음과 같은 작업을해야,

    다음과 같은 작업을해야,

    select * FROM
    (
      SELECT 
       Branch,
       Category,
       Sales, 
       Stock, 
       Target
      FROM Table1
     ) AS P
     unpivot
     (
     [Value] FOR [OutPut] IN (sales,stock,[target])
     )unpvt
     pivot
     (
     max([Value]) for  Category in (Panel,AC,Ref) 
     )pvt
    order by Branch Desc
    
  5. from https://stackoverflow.com/questions/38067490/in-sql-server-how-to-pivot-for-multiple-columns by cc-by-sa and MIT license