0

正しいデータを取得するのに問題があります...

tblbuilding と tbldataの 2 つのテーブルがあります。

ここに私のtblbuilding があります:

ここに画像の説明を入力

ここに私のtbldata があります:

ここに画像の説明を入力

私の質問:

ここでの私の fldWeek は「第 3 週」です。

SELECT tblbuilding.fldBldgName
      ,tblbuilding.fldNetname
      ,MAX(tbldata.fldDuration) AS fldDuration
      ,tbldata.fldWeek
      ,tbldata.fldYear
FROM tblbuilding AS tblbuilding_1 
    LEFT OUTER JOIN tbldata ON tblbuilding_1.fldBldgName = tbldata.fldBldgName 
    CROSS JOIN tblbuilding
WHERE (tblbuilding.fldNetname = 'LRT - 2') 
    AND (tbldata.fldWeek = 'Week 3' OR tbldata.fldWeek IS NULL)
    AND (tbldata.fldYear = '2013' OR tbldata.fldYear IS NULL)
GROUP BY tbldata.fldWeek
        ,tblbuilding.fldBldgName
        ,tblbuilding.fldNetname
        ,tbldata.fldYear
ORDER BY tblbuilding.fldBldgName

上記のクエリの結果は次のとおりです。

ここに画像の説明を入力

どちらが正しい....

しかし、fldWeekを「週2」に変更したとき

結果は次のとおりです。

ここに画像の説明を入力

正しい結果は次のようになります....「第 2 週に NOT NULL が 2 つしかない場合」

ここに画像の説明を入力

ありがとう....

4

1 に答える 1

3

デカルト積を取得する必要はないと思います。

のみを使用してこれを試してくださいLEFT JOIN

SELECT  a.ID,
        a.fldBldgName,
        b.fldDuration,
        b.fldWeek,
        b.fldYear
FROM    tblBuilding a
        LEFT JOIN tblData b
            ON  a.fldBldgName = b.fldBldgName
                AND b.fldWeek = 'Week 3'
                AND b.fldYear = '2013'
WHERE   a.fldNetname = 'LRT - 2' 
于 2013-11-05T10:53:40.817 に答える