|
括弧のネストがおかしいようです。
不必要な括弧があるとネストの深さがどうなっているのか見づらいので、
必用最低限の括弧のみにしましょう。
あと改行と字下げを適切に入れるとより見やすいでしょう。
現状の条件は下記のようなネストになっています。
WHERE
(
((Year([日付])+(Month([日付])<4))>=Year(Date())+(Month(Date())<4))
AND ((クエリA.IDコード) Between 1 And 10)
)
OR
(
((クエリA.IDコード)=13)
OR (((クエリA.IDコード)=15))
OR (((クエリA.IDコード)=25)
)
IDコード 13,15,25 には年度制限がかからず全件表示されてしまいます。
下記のような条件になるようにすべきです。
WHERE
(
Year([日付])+(Month([日付])<4)>=Year(Date())+(Month(Date())<4)
)
AND
(
クエリA.IDコード Between 1 And 10
OR クエリA.IDコード=13
OR クエリA.IDコード=15
OR クエリA.IDコード=25
)
このように必用最低限の括弧にして、改行と字下げを適切に入れると
見やすくなり間違いも回避できます。
さらに、いうと、
Year([日付])+(Month([日付])<4)
というようにフィールドを関数の引数にしてしまうとインデックスが
利用できないので件数が多いと重くなります。
フィールドはそのままにして右辺の方をうまく工夫するとインデックスが
利用できて処理が高速になります。
あと In演算子も利用するとシンプルになります。
WHERE
(
日付 >= DateSerial(Year(Date())+(Month(Date())<4),4,1)
)
AND
(
クエリA.IDコード Between 1 And 10
OR クエリA.IDコード In (13,15,25)
)
どうでしょう。
|
|