SQL - 有条件地评估WHERE子句
问题描述:
我需要获取WHERE子句才能评估某些语句。例如:SQL - 有条件地评估WHERE子句
WHERE field_a = field_b AND
(CASE WHEN <PARAM>type</PARAM> = 5
THEN {field_c = 1 OR field_c = 2}
WHEN <PARAM>type</PARAM> = 6
THEN {field_c = 3 OR field_c = 4}
ELSE field_c = <PARAM>type</PARAM>
因此,当参数类型= 5时,它只会检查field_c = 1或2.是否有想法?
答
WHERE field_a = field_b
AND (
(type = 5 AND (field_c = 1 OR field_c = 2))
OR (type = 6 AND (field_c = 3 OR field_c = 4))
OR field_c = type
)
这就是你所追求的?
答
WHERE
((field_a = field_b)) AND
(((<PARAM>type</PARAM> = 5) AND (field_c IN (1, 2))) OR
((<PARAM>type</PARAM> = 6) AND (field_c IN (3, 4))) OR
((<PARAM>type</PARAM> NOT IN (5, 6) AND <PARAM>type</PARAM> = field_c)))
答
这样做吗?
Where field_a = field_b AND
(
(<PARAM>type</PARAM> = 5 AND field_c IN (1,2))
OR (<PARAM>type</PARAM> = 6 AND field_c IN (1,2))
OR (field_c = <PARAM>type</PARAM>)
)
答
这是我想到的,从帖子的一些灵感后,我意识到我不需要这样的条件代码。此外,Param类型可以接受多个值,并以逗号分隔输出它们,这非常有帮助。
WHERE field_a = field_b AND
(field_c in (<PARAM>type</PARAM>))
感谢您的帮助!
答
WHERE field_a = field_b AND
CASE WHEN <PARAM>type</PARAM> = 5 THEN
CASE WHEN field_c = 1 OR field_c = 2 THEN 1 ELSE 0 END
WHEN <PARAM>type</PARAM> = 6 THEN
CASE WHEN field_c = 3 OR field_c = 4 THEN 1 ELSE 0 END
ELSE
CASE WHEN field_c = <PARAM>type</PARAM> THEN 1 ELSE 0 END
END = 1
如果使用“(field_c in(1,2))”和下一行使用“(field_c in(3,4))”,则可能会更清楚 – MJB 2010-04-09 12:58:11