-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を列名にピボットしてから、投票者が行でどのように投票したかを示す必要があります。提案?ありがとう!

4

1 に答える 1

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)
于 2012-07-11T21:10:47.273 に答える