Чтобы уточнить мой комментарий, который вы не поняли, как кажется:
Если у вас есть выражение, которое выглядит как A OR B
, это выражение будет истинным, если (1) A
Значение true, а B
- значение false, если (2) A
- значение false, а B
- значение true или (3) A
- значение true, а B
- значение true.Это только ложь, когда (4) оба, A
и B
являются ложными.
Следовательно, вы можете написать свое предложение WHERE
как:
WHERE aa.pt <> 'Ins' OR aa.flag = 'Y'
ПустьA
be aa.pt <> 'Ins'
и B
be aa.flag = 'Y'
здесь.Если aa.flag = 'Y'
верно, то применяются условия 2 (или) и условие истинно независимо от aa.pt <> 'Ins'
.Если aa.flag = 'Y'
равно false, условие истинно тогда и только тогда, когда aa.pt <> 'Ins'
верно, из-за случая (1).В противном случае применяется случай (4), а условие ложно.
Это именно та логика, которой вы хотите достичь.Здесь просто не используется динамическая акробатика SQL (которая, скорее всего, не будет работать в любом случае, так как вы не знаете значений при построении строки и, следовательно, не можете решить, какое предложение поместить туда).