728x90

위의 테이블에서 USE_YYMM 컬럼을 가변될 기준으로 하여  

USE_TYPE 별로 합계 구하는 쿼리 예시.

 

-- 임시 테이블 생성
CREATE TABLE #MONEY_HISTORY(
	USE_TYPE		NVARCHAR(10)	NOT NULL,
	USE_YYMM	NVARCHAR(10)	NOT NULL,
	AMT			INT			NOT NULL
)

INSERT INTO #MONEY_HISTORY VALUES ('외식', '2022년 7월', 12000)
INSERT INTO #MONEY_HISTORY VALUES ('외식', '2022년 7월', 10000)
INSERT INTO #MONEY_HISTORY VALUES ('외식', '2022년 7월', 7000)
INSERT INTO #MONEY_HISTORY VALUES ('공과금', '2022년 7월', 30000)

INSERT INTO #MONEY_HISTORY VALUES ('외식', '2022년 8월', 11000)
INSERT INTO #MONEY_HISTORY VALUES ('생필품', '2022년 8월', 25000)
INSERT INTO #MONEY_HISTORY VALUES ('생필품', '2022년 8월', 50000)
INSERT INTO #MONEY_HISTORY VALUES ('공과금', '2022년 8월', 30000)

INSERT INTO #MONEY_HISTORY VALUES ('외식', '2022년 9월', 6000)
INSERT INTO #MONEY_HISTORY VALUES ('외식', '2022년 9월', 8000)
INSERT INTO #MONEY_HISTORY VALUES ('생필품', '2022년 9월', 10000)
INSERT INTO #MONEY_HISTORY VALUES ('공과금', '2022년 9월', 30000)

-- 가변될 기준 컬럼 ---------------------
SELECT DISTINCT USE_YYMM 
INTO #YYMM
FROM #MONEY_HISTORY

-- SQL 생성 -----------------------------                     
 DECLARE @SQL VARCHAR(MAX)                   
                        
 SELECT @SQL = 'SELECT USE_TYPE' 
 SELECT @SQL = @SQL + ', SUM(CASE WHEN USE_YYMM = ''' +  USE_YYMM  + '''' +                              
                      ' THEN AMT ELSE 0.00 END ) AS ''' + USE_YYMM +''''                                       
					  FROM #YYMM
 SELECT @SQL = @SQL + 
 'FROM #MONEY_HISTORY
 GROUP BY USE_TYPE
 ORDER BY USE_TYPE'

 EXEC (@SQL)  -- 가변 컬럼으로 조회
 
-- 임시 테이블 삭제 ---------------------
-- DROP TABLE #YYMM, #MONEY_HISTORY

 

실행 결과

 

728x90