select * into dbo.tSample
from (
values (N'테스트1',8809182000011,50.00), (N'테스트1',8809182000028,60.00), (N'테스트1',8809182000042,70.00)
,(N'테스트2',2400000000013,100.00), (N'테스트2',2400000000020,200.00), (N'테스트3',8809182000011,100.00)
,(N'테스트3',8809182000028,200.00)
) as a (cBrench,cBarCode,cItemCnt)
go
declare
@vProd varchar(2000) = ''
,@vProd2 varchar(2000)
,@vProd3 varchar(2000)
,@vSQL varchar(max)
select @vProd += ',['+ cBrench +']' from (select distinct cBrench from dbo.tSample) as a
set @vProd = stuff(@vProd,1,1,'')
set @vProd2 = replace(replace(replace(@vProd,',','+'),'[','isnull(['),']','],0)') +' as [합계]'
set @vProd3 = replace(replace(@vProd,'[','isnull(Sum('),']','),0)') -- Rollup을 하기위한 필드 구성 변수
print @vProd
print @vProd2
print(@vProd3)
set @vSQL = '
select cBarCode, '+ @vProd +', '+ @vProd2 +'
from (select cBarCode, cBrench, cItemCnt from dbo.tSample) as a
pivot (sum(cItemCnt) for cBrench in ('+ @vProd +')) as pvt '
print @vSQL
--exec (@vSQL)
drop table ##temp
Exec('select * into ##temp from ('+@vSQL+') as a ') -- 전역변수에 결과을 담는다.
select * from ##temp --확인+
select cBarCode
--, SUM(테스트1) 테스트1, SUM(테스트2) 테스트2, SUM(테스트3) 테스트3, SUM(합계) 합계 --1
--,isnull(Sum(테스트1),0), isnull(Sum(테스트2),0), isnull(Sum(테스트3),0) ---2
,@vProd3 -- 쿼리 결과 2400000000013, isnull(Sum(테스트1),0), isnull(Sum(테스트2),0), isnull(Sum(테스트3),0)--3
from ##temp group by Rollup(cBarCode)
도움을 받아 Pivot 동적쿼리을 사용중에 있습니다.(도움 주셔서 감사합니다.)
여기에 Rollup을 하기위해 1,2,3 코드을 각각 실행해 봅니다.
1, 2 는 잘 작동합니다.
3번은 쿼리결과값이 위의 내용처럼 나옵니다. @vProd3 의 내용이 2 번하고 같은데 왜 저렇게 나오는 건가요.?
동적쿼리문 내에서 Rollup을 구현 할수가 있을까요. 결과값이 당췌....?
감사합니다.
좋은하루 보내세요.