[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.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.
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에에 떨어질해야합니다.
from https://stackoverflow.com/questions/159456/pivot-table-and-concatenate-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 엑셀 날짜 일련 번호 정기적으로 날짜로 변환 (0) | 2020.04.04 |
---|---|
[SQL] SQL 서버에서 재귀 쿼리 (0) | 2020.04.04 |
[SQL] 행에 쉼표로 구분 된 열 값을 변환 (0) | 2020.04.04 |
[SQL] SQL (ORACLE) : ORDER BY와 LIMIT [중복] (0) | 2020.04.04 |
[SQL] SQL 서버 - 선언 된 변수 절에 [중복] (0) | 2020.04.04 |