2

調査情報を含むテーブルのコレクションがあり、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 ページで使用するには時間がかかると考えられます。バッファー制限を増やすことは、ジョブのオプションではありません。この情報を他の方法で取得する方法がわかりません。

ピボット クエリについて読んでいましたが、理解できませんでした。この方法または他の方法を使用して結果をより速く取得する方法はありますか?

4

1 に答える 1