###前提・実現したいこと
ACCESS2010で左外結合の結果、右表に結合すべき行がない場合、右表のカラムを引数とするsum関数の返り値として必ずNULLまたは0を得たいと思っています。
###発生している問題・エラーメッセージ
左外結合の結果のデータシートビューで、結合する行がないサブクエリの列"ZF"のsumの結果の"ZCount"に1が返ってくる。他の列の挙動としては、JF1~JH3とADCountには0が返され、S1~KKPには何も表示されません(おそらくNullが返ってきている)。
###該当のソースコード
SELECT LocalGov.LgName, sum(JF1) AS JT1, sum(JF2) AS JT2, sum(JF3) AS JT3, max(J1) AS JP1, max(J2) AS JP2, max(J3) AS JP3, sum(J1) AS JH1, sum(J2) AS JH2, sum(J3) AS JH3, sum(ZF) AS ZCount, sum(AF) AS ADCount, sum(Sk_zai) AS S1, max(Sk_zai) AS SP1, sum(Sk_ad) AS S2, max(Sk_ad) AS SP2, sum(Tk_zai) AS SK1, max(Tk_zai) AS SKP1, sum(Tk_ad) AS SK2, max(Tk_ad) AS SKP2, sum(Hikasan) AS HK, max(Hikasan) AS HKP, sum(Kikasan) AS KK, max(Kikasan) AS KKP
FROM LocalGov LEFT JOIN (SELECT LgName, iif(Jtype=1,1,0) AS JF1, iif(Jtype=2,1,0) AS JF2, iif(Jtype=3,1,0) AS JF3, iif(Jtype=1,Jimu,0) AS J1, iif(Jtype=2,Jimu,0) AS J2, iif(Jtype=3,Jimu,0) AS J3, iif(isnull(Date_ad),1,0) AS ZF, iif(isnull(Date_ad),0,1) AS AF, Sk_zai, Sk_ad, Tk_zai, Tk_ad, Hikasan, Kikasan FROM WT_SQ_G1) AS T1 ON LocalGov.LgName = T1.LgName
WHERE LgMember=true
GROUP BY LocalGov.LgName, LgMemberSeq
ORDER BY LgMemberSeq;
###試したこと
sum(ZF) as ZCountを、sum(Nz([ZF],0) as ZCountとしても結果は同じでした。選択列にcount(LgName) as Fooを追加して、iif(Foo>0,sum(ZF),0) as ZCountとすると結果に0を得られますが、すべての列について同じようにするよりもシンプルにしたいと思っています。
###補足情報(言語/FW/ツール等のバージョンなど)
LocalGov、WT_SQ_G1ともにACCESSのローカルテーブルです。Date_adがNullの件数とNullでない件数を求めるために、それぞれ"ZF","AF"列を設けてどちらかに1を立てて選択列で合計しています。左表の"LgName"に等しい値を持つサブクエリの結果が存在しないときにこの問題が起こっています。結合できた場合は正しい結果が得られています。サブクエリ部分をクエリとして結合させても結果は変わりませんでした。
テーブル"LocalGov"と"WT_SQ_G1"について省略して記述します。
LocalGov
ID LgName LgMember LgMemberSeq
101 A True 2
102 B True 1
WT_SQ_G1
LgName Jtype Jimu Date_ad 以下省略
A 1 88,000 Null
A 2 111,300 Null
A 3 55,000 2016/8/21
結果
LgName JT1 JT2 JT3 JP1 JP2 JP3 JH1 JH2 JH3 ZCount ADCount
A 1 1 1 88,000 111,300 55,000 88,000 111,300 55,000 2 1
B 0 0 0 0 0 0 0 0 0 1 0
このLgName=Bの、ZCountが1になるのが不可解なんです。
(よく考えるとそれ以外の列が0を返すのが妙といえば妙ですが。)
回答1件
あなたの回答
tips
プレビュー