2012-07-11 2 views
-1
여기

이 테이블 구조 투표 방법을 보여줍니다 :동적 피벗 유권자

Election 
ElectionId ElectionName 
1   12P 
2   11G 

History 
ElectionId VoterId HowVoted 
1   1  Rep 
2   2  Dem 
1   2  Non 

Voter 
VoterId VoterName 
1  Bill Smith 
2  John Hearst 

내가 원하는과 같이 출력 :

VoterName 12P 11P note: Election names change so need to be pivoted dynamically 
Bill Smith Rep Null 
John Hearst Non Dem  
나는 기본적으로 열 이름에 ElectionNames을 선회 할 필요가

및 유권자가 투표에서 어떻게 투표했는지 보여줍니다. 제안? 감사!

+2

샘플 데이터 및 원하는 결과를 제시해주십시오. 또한'{}} '을 사용하여'
'태그 대신 코드 샘플을 올바르게 강조 표시하십시오. –

+0

시도한 것을 보여주지 않았습니까? –

답변

1

은 당신과 같이 사용하여이 동적 SQL을 수행 할 수 있습니다

-- Get column names 
DECLARE @Columns VARCHAR(MAX); SET @Columns = ''; 
SELECT @Columns = @Columns + ', [' + ElectionName + ']' FROM Election; 
SET @Columns = SUBSTRING(@Columns, 3, LEN(@Columns)) -- Remove the leading ', ' 

-- Declare dynamic SQL 
DECLARE @sql VARCHAR(MAX); 
SET @sql = 'WITH CTE AS 
(
    SELECT VoterName, ElectionName, HowVoted 
    FROM Election e 
     INNER JOIN History h ON e.ElectionId = h.ElectionId 
     INNER JOIN Voter v ON v.VoterId = h.VoterId 
) 
SELECT [VoterName], ' + @Columns + 'FROM CTE 
PIVOT (MAX(HowVoted) FOR ElectionName IN ('+ @Columns + ')) AS p' 

-- Run dynamic SQL 
EXEC(@sql) 
+1

감사합니다. 작동합니다! WHERE PRECINCTID = @PrecinctId와 같이 where 절을 CTE에 추가해야하는 경우 후속 질문. 이것으로 주입 공격에 나 자신을 개방하고 있습니까? 그렇다면 해결 방법이 있습니까? – SirM

+0

[sp_executesql] (http://msdn.microsoft.com/en-us/library/ms188001.aspx)에서 매개 변수를 확인하십시오. – zimdanen