次のクエリを実行すると、結果が表示されないことがわかっていますが、結果から除外された行があります。私が参加することを削除し、別名「W」によって参照される列は、私はすべてを取得する場合
LEFT OUTERは= B.WP
W.CODE ON BDNDETL WのJOIN:私は参加5日にそれを絞り込みます私が期待している行W.CODE = B.WPに基づいてBに一致する行がないWがありますが、LEFT OUTER条件がこれらをキャッチすると思っていましたが、そうではありません。 INNER JOINのように扱うようです。外部結合行を除外する
SELECT
p.p2 AS "Section",
d.d9 AS "Alt WBS",
p.p3 AS "Year",
B.ca1 AS "WBS",
concat(b.ca1,'/',b.ca2,'/',b.wp,b.descrip) AS "Work Package",
B.WP,
w.d9 AS "Cost Category",
B.C3 AS "Provider",
b.c1 AS "TType",
w.d4 AS "WP GLA Cat",
U.COSTSET,
CONVERT(varchar, T.PD_FINISH, 101) period,
SUM(A.ALLOWANCE1 + A.ALLOWANCE2 + A.ALLOWANCE3 + A.ALLOWANCE4 + A.ALLOWANCE5 + A.BASIC + A.BONUS + A.COMMODITY + A.DIRECT + A.ENHANCED + A.NIERS + A.OVERTIME + A.PENSION + A.PILON + A.REDUNDANCY) Value
FROM
TPHASE A JOIN CAWP B ON
B.PROGRAM = A.PROGRAM AND B.CAWPID = A.CAWPID
JOIN MULTPROG X ON
A.PROGRAM = X.SUBPROGRAM
JOIN PROGRAM P ON
A.PROGRAM = P.PROGRAM
JOIN BDNDETL D ON
D.CODE = B.CA1
LEFT OUTER JOIN BDNDETL W ON
W.CODE = B.WP
JOIN COSTDETL U ON
A.CLASS = U.CLASS
JOIN RCUTOFF T ON
A.DF_DATE BETWEEN T.PD_START AND T.PD_FINISH
WHERE
X.MASTER = @master AND
D.BREAKFILE = @wbsfile AND
U.INSTANCE = @costdetlid AND
T.INSTANCE = @cutoffid AND
W.BREAKFILE = @wpbdn
GROUP BY
p.p2,
d.d9,
p.p3,
B.ca1,
concat(b.ca1,'/',b.ca2,'/',b.wp,b.descrip),
B.WP,
w.d9,
B.C3,
b.c1,
w.d4,
U.COSTSET,
T.PD_FINISH
;
問題はwhere条件にあります。W.BREAKFILE = @ wpbdn;これを左結合のオン条件に含めます[左外部結合BDNDETL W ON W.CODE = B.WP AND W.BREAKFILE = @ wpbdn –