복붙노트

[SQL] 피벗 테이블과 연결하여 열

SQL

피벗 테이블과 연결하여 열

나는 다음과 같은 형식의 데이터베이스를 가지고 :

 ID    TYPE   SUBTYPE    COUNT   MONTH
 1      A      Z          1       7/1/2008
 1      A      Z          3       7/1/2008
 2      B      C          2       7/2/2008
 1      A      Z          3       7/2/2008

나는이로 변환 SQL을 사용할 수 :

ID    A_Z   B_C   MONTH
1     4     0     7/1/2008
2     0     2     7/2/2008
1     0     3     7/2/2008

그래서, TYPE, SUBTYPE 새로운 열로 결합되고 COUNT 어디에 MONTH ID와 일치 합산된다.

모든 팁은 감사하겠습니다. 이 SQL에서 가능 아니면 수동으로 프로그램해야합니까?

데이터베이스는 SQL 서버 2005입니다.

유형 및 하위 유형되도록 'A'와 'Z'가 하드 코딩하지만 동적으로 생성되지 않아야 수백이있다 가정하자.

해결법

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

    1.SQL Server 2005 개의 제안이 코드는 유지 보수가 필요없는 PIVOT 및 일부 코드 생성 / 동적 SQL을 사용하여 만들 수있는 매우 유용한 PIVOT 및 UNPIVOT 연산자

    SQL Server 2005 개의 제안이 코드는 유지 보수가 필요없는 PIVOT 및 일부 코드 생성 / 동적 SQL을 사용하여 만들 수있는 매우 유용한 PIVOT 및 UNPIVOT 연산자

    /*
    CREATE TABLE [dbo].[stackoverflow_159456](
        [ID] [int] NOT NULL,
        [TYPE] [char](1) NOT NULL,
        [SUBTYPE] [char](1) NOT NULL,
        [COUNT] [int] NOT NULL,
        [MONTH] [datetime] NOT NULL
    ) ON [PRIMARY]
    */
    
    DECLARE @sql AS varchar(max)
    DECLARE @pivot_list AS varchar(max) -- Leave NULL for COALESCE technique
    DECLARE @select_list AS varchar(max) -- Leave NULL for COALESCE technique
    
    SELECT @pivot_list = COALESCE(@pivot_list + ', ', '') + '[' + PIVOT_CODE + ']'
            ,@select_list = COALESCE(@select_list + ', ', '') + 'ISNULL([' + PIVOT_CODE + '], 0) AS [' + PIVOT_CODE + ']'
    FROM (
        SELECT DISTINCT [TYPE] + '_' + SUBTYPE AS PIVOT_CODE
        FROM stackoverflow_159456
    ) AS PIVOT_CODES
    
    SET @sql = '
    ;WITH p AS (
        SELECT ID, [MONTH], [TYPE] + ''_'' + SUBTYPE AS PIVOT_CODE, SUM([COUNT]) AS [COUNT]
        FROM stackoverflow_159456
        GROUP BY ID, [MONTH], [TYPE] + ''_'' + SUBTYPE
    )
    SELECT ID, [MONTH], ' + @select_list + '
    FROM p
    PIVOT (
        SUM([COUNT])
        FOR PIVOT_CODE IN (
            ' + @pivot_list + '
        )
    ) AS pvt
    '
    
    EXEC (@sql)
    
  2. ==============================

    2.

    select id,
    sum(case when type = 'A' and subtype = 'Z' then [count] else 0 end) as A_Z,
    sum(case when type = 'B' and subtype = 'C' then [count] else 0 end) as B_C,
    month
    from tbl_why_would_u_do_this
    group by id, month
    

    당신은 우리의 마케팅 팀보다 더 많은 요구 사항을 변경! 당신이 동적 싶은 경우에 당신은 다시 sproc에에 떨어질해야합니다.

  3. from https://stackoverflow.com/questions/159456/pivot-table-and-concatenate-columns by cc-by-sa and MIT license