Как использовать ИЛИ в части ELSE оператора CASE

Вот мое требование.. в операторе sql CASE, когда условие WHEN выполняется, THEN часть должна быть выполнена.. если условие не выполнено, мне нужно иметь два варианта для выбора (это означает, что мне нужно иметь ИЛИ в ДРУГОЙ части).

Я застрял здесь..

CASE WHEN 
   tablename.ID=0 
THEN 
   tablename.description 
ELSE 
   tablename.description2 OR tablename.description2 
END AS abcd

Я выполняю миграцию foxpro в sql, поэтому столкнулся с оператором в foxpro, который использует '/' в части ELSE своего оператора CASE (называемого IIF в foxpro).

Я предполагаю, что '/' будет ИЛИ в SQL

Любое решение для удовлетворения этого требования, пожалуйста?


person rock    schedule 14.06.2012    source источник
comment
Эта логика не имеет никакого смысла. Вы выполняете операцию ИЛИ над выражением, а не над результатами. То, что отображается в ELSE, — это значение, которое вы хотите поместить в поле, когда tablename.ID ‹› 0.   -  person N West    schedule 14.06.2012
comment
Можете ли вы опубликовать больше запроса, пожалуйста   -  person Purplegoldfish    schedule 14.06.2012
comment
Хм, разве / в FoxPro нет подразделения , так же, как в SQL Server?   -  person Damien_The_Unbeliever    schedule 14.06.2012
comment
Помимо того, что вы не можете использовать OR в результатах, у вас есть одно и то же поле по обе стороны от OR? Это означает, что это имеет еще меньше смысла!   -  person GarethD    schedule 14.06.2012
comment
мой результат должен выдавать либо field1, либо field2 (разные поля, извините за публикацию одного и того же имени поля).. если ИЛИ не является решением в этом случае.. могу ли я иметь альтернативный подход для решения этой проблемы?   -  person rock    schedule 14.06.2012
comment
Вам нужно указать, при каких обстоятельствах это будет поле1, а при каких — поле2, иначе невозможно создать правило, определяющее это. Единственная другая возможность, о которой я могу думать, заключается в том, что ELSE должно быть ELSE COALESCE(Field1, Field2) END, т.е. когда поле1 имеет значение null по умолчанию для поля2, в противном случае используйте поле1.   -  person GarethD    schedule 14.06.2012
comment
Дэмиен, я предполагал то же самое, но это не дает мне результатов. Я мало что знаю о foxpro, поэтому просто пробую разные способы получить желаемый результат. Спасибо, Гарет, я попробую, если COALESCE сработает..   -  person rock    schedule 14.06.2012
comment
Если это все еще не решено, можете ли вы опубликовать исходный оператор IIF() из foxpro, из которого вы конвертируете.   -  person DRapp    schedule 14.06.2012
comment
Эй, я действительно решил это.. '/' действительно подразделение IS! мне просто нужно было сделать кое-какой кастинг.. слишком много думал.. вот оператор IIF для вашей информации IIF (table1.NO = 0, 0000000, table1.QTY/table1.NO)..   -  person rock    schedule 14.06.2012


Ответы (1)


Если у вас есть другое условие, от которого нужно зависеть, вы можете вставить второй случай в первый раздел else:

CASE 
    WHEN tablename.ID=0 THEN tablename.description 
    ELSE 
        CASE
            WHEN condition2 THEN tablename.description2 
            ELSE tablename.description2 
        END
END AS abcd

Есть ли что-то подобное, что вы хотели бы сделать?

person Csaba Benko    schedule 14.06.2012