declare @temptable table
(
nid int identity(1,1) not null
,remark varchar(20) null
)
insert @temptable(remark) select distinct(remark) from brm
--임시테이블의 내용 확인
declare @sName varchar(50), @iLoop int, @i int, @NameBuff varchar(MAX)
Set @NameBuff = '' Set @i = 1
select @iLoop = Max(nid) from @temptable
while @i <= @iLoop begin
select @sName = remark from @temptable where nid =@i
print @sName
if @i = 1
begin
Set @NameBuff = '[' + @sName + ']'
end
else
begin
Set @NameBuff = @NameBuff + ',' + '[' + @sName + ']' -- [001][002] 게 배열한다.
end
Set @i = @i + 1
end;
print @NameBuff
--실제 테이블 쿼리
Select * from
(select barcode, Code , Itemcount from brList) AS P
PIVOT
(SUM(Itemcount) FOR Code IN (@NameBuff)) AS PiVotTest --'@NameBuff' 근처의 구문이 잘못되었습니다.
PIVOT 테스트 하다가 [001][002] 가 들어가야 할부분에 (@NameBuff 게 변수로 하니
'@NameBuff' 근처의 구문이 잘못되었습니다 라고 메세지가 나옵니다.
변수할당을 어떻게 해줘야 하나요.?
감사 합니다.
좋은 하루 보내세요.
Comment 7
-
악마곰
2015.03.10 15:18
-
희망나라
2015.03.10 17:57
답변감사드립니다.
여기는 만물상 같아요.
뚝딱 뚝딱 하면 뭔가가 나오는곳..
고맙습니다.
-
희망나라
2015.03.10 18:17
죄송하지만
올려주신 내용은 제가 질문한 내용과 같은 방식같은데...?
-
악마곰
2015.03.11 14:11
예제 실행해보시면 오류는 없습니다
쿼리 내용상 별다른 점은 없으나 최종 실행단계를
아래 민석님이 말씀하신 다이나믹 쿼리 활용하시면 되십니다
Exec -->> sp_executesql 로 변경하시구요
질문하신 내용으로는 그냥 쿼리 연결구문이라
오류 발생합니다
중국공항에서 한국 복귀 대기중 모바일로 댓글중이라 길게 쓰지를 못합니다 양해바랍니다 -
minsouk
2015.03.11 09:52
전체를 dynamic sql 로 하라는 말입니다. 젤 앞에 exec (' 로 시작하잖아요...
그런데요 변수 처리 할 수 있다면 sp_executesql 을 쓰시는게 좋습니다. 안그러면 플랜공해를 맛보게 될 수 있습니다. ^^;;
-
악마곰
2015.03.11 14:03
역시 고수님등장에 고개를 숙입니다
ㅎㅎㅎ
감사합니당 -
희망나라
2015.03.11 15:51
에고..
제가 착각 했습니다.
감사합니다.
동적으로 처리 하고자 하시는 군요...
예제 첨부 드립니다.
declare @sql nvarchar(1000)
declare @sub_sql nvarchar(1000)
set @sub_sql = '[a100],[a200],[a300]'
exec ( '
-- 임시테이블 선언
declare @test table
(
a nvarchar(10),
b nvarchar(4),
c decimal(18,2)
)
-- test data insert
insert @test
select ''a'', ''a100'', 10000 union all
select ''a'', ''a200'', 10000 union all
select ''a'', ''a100'', 10000 union all
select ''a'', ''a300'', 10000 union all
select ''a'', ''a100'', 10000 union all
select ''a'', ''a200'', 10000
select a, ' + @sub_sql + '
from @test
pivot
(sum(c) for b in ( ' + @sub_sql + ' )) pivotTemp'
)