6

何度も失敗した後、理解できないように見える問題があります。

レポートのために結合する必要がある 3 つのテーブルがあり、2 番目のテーブルにはレコードが存在しない可能性があります。レコードが存在しない場合は、3 番目のテーブルから取得したデータの null 値を報告する必要があります。

最も基本的な形式のテーブル構造は次のとおりです (調査用です)。

表A(調査)
-----------------------
測量番号 | 調査 ID
016243023708 1152010

表 B (応答)
----------------------------------
調査 ID | 質問ID | 応答 ID
1152010 1279235 486

表 C (応答値)
--------------------
応答 ID | 価値
486はい

表 B にレコードが存在しない理由を説明するのは、調査が完了すると値が挿入されるためです。ユーザーが調査を終了せずに終了した場合 (後で戻ってくる可能性があります)、テーブル B のレコードは存在しません。この場合、テーブル C の値は null として報告される必要があります。

もう少し簡単になれば、質問 ID 1279235 に特化したレポートを作成する必要があります。

これは、これまでに作成したクエリです (質問 1279235 のテーブル b でレコードが欠落している調査以外はすべて表示されます)。

SELECT      A.SurveyNumber, A.SurveyId, B.QuestionID, C.Value
FROM        tblA A
LEFT JOIN   tblB B
        ON  A.SurveyId = B.SurveyId
LEFT JOIN   tblC C
        ON  B.ResponseId = C.ResponseId 
WHERE       B.QuestionId = 1279235

必要に応じて、さらに明確にすることができます。

前もって感謝します

4

2 に答える 2

10

レコードが存在しない可能性があるため、条件を where 句ではなく、結合部分に配置しないでtablecください。

SELECT      A.SurveyNumber, A.SurveyId, B.QuestionID, C.Value
FROM        tblA A
            LEFT JOIN   tblB B
                  ON  A.SurveyNumber = B.SurveyNumber AND 
                      B.QuestionId = 1279235
            LEFT JOIN   tblC C
                  ON  B.ResponseId = C.ResponseId
于 2012-11-21T13:48:16.003 に答える
2

これを試して:

SELECT
    A.SurveyNumber, A.SurveyId, B.QuestionID, C.Value
    FROM tblA        A
    LEFT JOIN tblB   B ON  A.SurveyId=B.SurveyId AND B.QuestionId=1279235
    LEFT JOIN tblC   C ON  B.ResponseId=C.ResponseId 

編集作業例:

DECLARE @tblA  table (SurveyNumber varchar(12),SurveyId int)
INSERT INTO @tblA VALUES ('016243023708',   1152010)
INSERT INTO @tblA VALUES ('016243023708',   1152011)

DECLARE @tblB table (SurveyId int, QuestionId int, ResponseId int)
INSERT INTO @tblB values (1152010,    1279235,      486)
INSERT INTO @tblB values (1152011,    1279235,      487)

DECLARE @tblC  table (ResponseId int, ValueOf varchar(10))
INSERT INTO @tblC values (486,          'Yes')


SELECT
    A.SurveyNumber, A.SurveyId, B.QuestionID, C.ValueOf
    FROM @tblA        A
    LEFT JOIN @tblB   B ON  A.SurveyId=B.SurveyId AND B.QuestionId=1279235
    LEFT JOIN @tblC   C ON  B.ResponseId=C.ResponseId 

出力:

SurveyNumber SurveyId    QuestionID  ValueOf
------------ ----------- ----------- ----------
016243023708 1152010     1279235     Yes
016243023708 1152011     1279235     NULL

(2 row(s) affected)
于 2012-11-21T13:48:31.137 に答える