생성 된 열의 순서가 잘못되어 다음과 같은 SQL 쿼리를 사용하여이를 수정하는 방법을 잘 모릅니다.동적 피벗의 열 정렬
SELECT rhead.rhcust AS [Cust ID], rdetl.rdextp AS [Inv Amt], rhead.rhivdt AS [Inv Date]
INTO #TempTable
FROM rhead
LEFT OUTER JOIN rdetl
ON rhead.rhinvc = rdetl.rdinvc
WHERE rhead.rhivdt >= '01-01-2012' AND rhead.rhivdt <= '12-25-12'
ALTER DATABASE Vista_TM SET COMPATIBILITY_LEVEL = 100
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME('Month'+cast(DATEPART(m, [Inv Date]) as varchar(2)))
from #TempTable
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')
set @query = 'SELECT [Cust ID],' + @cols + '
from
(
SELECT [Cust ID], [Inv Amt],
''Month''+cast(DATEPART(m, [Inv Date]) as varchar(2)) MonthNo
FROM #TempTable
) x
pivot
(
sum([Inv Amt])
for MonthNo in (' + @cols + ')
) p '
execute(@query)
DROP TABLE #TempTable
가 나는 쿼리의이 부분에 뭔가를 가지고 있다고 생각합니다 :
select @cols = STUFF((SELECT distinct ',' + QUOTENAME('Month'+cast(DATEPART(m, [Inv Date]) as varchar(2)))
from #TempTable
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')
나는이 topic에 게시 대답과 함께 장난 시도해 봤어하지만 난 쿼리를 실행할 수 없습니다. 나는 누군가가 도울 수 있기를 바라고 있습니다.
편집 내 행이 고장난 것으로 나타 났으며 [고객 ID]로도 정렬하고 싶습니다.
당신의 생각이 옳다, 당신은 단지 DATEPART에 의해'ORDER를 추가 할 수 있습니다 (m, [인보이스 날짜])'#의 TempTable''후하지만 전에'XML 경로 ('')'. 관련이 없으며 중요하지 않은 메모에서 'EXECUTE (@Query)', [Aaron Bertrand] (http://stackoverflow.com/users/) 대신 'EXECUTE SP_EXECUTESQL @ Query'를 사용하는 것이 더 좋습니다. 61305 /)도 [블로그에 대해] (http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/17/bad-habits-to-kick-using-exec-instead-of-sp-executesql .aspx) 그의 나쁜 습관 시리즈 킥. – GarethD