-- #1. 날짜 데이터
-- 동적 날짜 데이터 생성
WITH mycte AS
(
SELECT cast('2008-08-01' as datetime) DateValue
UNION all
SELECT DateValue + 1
FROM mycte
WHERE DateValue + 1 <= '2008-08-31'
)
SELECT Convert(char(10),DateValue,120) as Date FROM mycte
OPTION (MAXRECURSION 0)
-- #2. 동적 PIVOT
-- 임시 테이블 생성
CREATE TABLE #Orders (
Customer varchar(8),
Product varchar(5),
Quantity int
)
GO
-- 데이터 입력
INSERT INTO #Orders VALUES('Mike', 'Bike', 3)
INSERT INTO #Orders VALUES('Mike', 'Chain', 2)
INSERT INTO #Orders VALUES('Mike', 'Bike', 5)
INSERT INTO #Orders VALUES('Lisa', 'Bike', 3)
INSERT INTO #Orders VALUES('Lisa', 'Chain', 3)
INSERT INTO #Orders VALUES('LIsa', 'Bike', 4)
GO
SELECT * FROM #Orders
GO
-- PIVOT 테스트
SELECT * FROM #Orders
PIVOT (SUM(Quantity) FOR Product IN (Bike, Chain)
) AS PVT
GO
-- 추가 데이터 입력
INSERT INTO #Orders VALUES('Mike', 'Chain', 1)
INSERT INTO #Orders VALUES('Mike', 'Light', 2)
INSERT INTO #Orders VALUES('Lisa', 'Chain', 2)
INSERT INTO #Orders VALUES('LIsa', 'Light', 3)
GO
-- 추가된 Product 인 Light 에 대한 조회를 할 수 없기에 동적으로 Product 를 셀렉트 할 수 있는 쿼리 생성
DECLARE @Prod varchar(2000)
SET @Prod = ''
SELECT @Prod = @Prod + '[' + Product + '],'
FROM ( SELECT Distinct Product FROM #Orders ) A
SET @Prod = LEFT(@Prod, LEN(@Prod) - 1)
-- 실행
EXEC ('SELECT * FROM #Orders
PIVOT ( SUM(Quantity) FOR Product IN (' + @Prod + ')
) AS PVT')
GO
-- 임시 테이블 삭제
Drop Table #Orders