調査情報を含むテーブルのコレクションがあり、SQL Server
調査ごとに 1 つの行と回答ごとに 1 つの列を持つクエリを実行したいと考えています。
構造は次のように設定されています。
ResponseHeader:
ID (record for each survey)
Responses:
ID
responseHeaderID
questionID
answerItemsID
AnswerItems:
ID (This is the value needed in each answer column)
answerText
以下は、私が思いついたクエリです。
SELECT ResponseHeader.id
, ResponseHeader.YOS
, ResponseHeader.rankID
, ResponseHeaderunitID
, ResponseHeader.age
, ResponseHeader.gender
, MAX(CASE WHEN Responses.questionID = 42 THEN AnswerItems.id END)
, MAX(CASE WHEN Responses.questionID = 43 THEN AnswerItems.id END)
, MAX(CASE WHEN Responses.questionID = 44 THEN AnswerItems.id END)
, --.....there are 79 of these lines in the query, one for each question (Responses.questionID)
MAX(CASE WHEN Responses.questionID = 48 THEN AnswerItems.id END)
, MAX(CASE WHEN Responses.questionID = 48 THEN AnswerItems.id END)
, MAX(CASE WHEN Responses.questionID = 50 THEN AnswerItems.id END)
, MAX(CASE WHEN Responses.questionID = 49 THEN AnswerItems.id END)
FROM ResponseHeader
LEFT OUTER JOIN Responses ON ResponseHeader.id = Responses.responseHeaderID
LEFT OUTER JOIN AnswerItems ON Responses.answerItemsID = AnswerItems.id
WHERE completed = 1
GROUP BY
ResponseHeader.id
, YOS
, rankID
, unitID
, age
, gender
ORDER BY ResponseHeader.id;
正しい結果セットが返されますが、Query Analyzer での実行には 18 秒かかります。4592 行を返し、85 列あります。残念ながら、バッファ制限に達するIIS
ため、従来の ASP ページで使用するには時間がかかると考えられます。バッファー制限を増やすことは、ジョブのオプションではありません。この情報を他の方法で取得する方法がわかりません。
ピボット クエリについて読んでいましたが、理解できませんでした。この方法または他の方法を使用して結果をより速く取得する方法はありますか?