SQL - условно оценивать предложения WHERE - PullRequest
0 голосов
/ 09 апреля 2010

Мне нужно получить предложение 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. Есть мысли?

Ответы [ 5 ]

3 голосов
/ 09 апреля 2010
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)))
0 голосов
/ 09 апреля 2010
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
0 голосов
/ 09 апреля 2010

Вот то, что я придумал, после некоторого вдохновения из постов я понял, что мне не нужен такой условный код. Кроме того, тип Param может принимать несколько значений и выводить их через запятую, что очень помогает.

WHERE field_a = field_b AND
   (field_c in (<PARAM>type</PARAM>))

Спасибо за помощь!

0 голосов
/ 09 апреля 2010

Будет ли это сделать?

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>)
)
0 голосов
/ 09 апреля 2010
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
)

Это то, что вы ищете?

...