Вложенные операторы CASE в MySQL

Я впервые работаю с CASE Logic в операторах SQL. Все работает, если я удалю операторы CASE, поэтому SQL действителен и без них.

Мне нужно рассчитать общую стоимость товара на основе нескольких вещей.

Если «Цена продажи» активна И «Доплата за опцию» имеет значение, общая сумма будет :Кол-во*(Цена продажи + доплата за опцию)

Если «Цена продажи неактивна И «Доплата за опцию» имеет значение, общая сумма будет :Кол-во*(Цена + Доплата за Опцию)

Если «Цена продажи» активна И «Доплата за опцию» НЕ имеет значения, общая сумма будет равна :Кол-во *Цена продажи

Если «Цена продажи неактивна И «Доплата за опцию» НЕ имеет значения, общая сумма равна :Кол-во *Цена

Если опция не была добавлена, значение для tblproduct _options.option _upcharge равно NULL на выходе.

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

Бретт

Вот мой SQL:

SELECT tblshopping_cart.session_id, tblshopping_cart.product_id, tblshopping_cart.product_qty, tblshopping_cart.product_option, tblproducts.product_title, tblproducts.product_price, tblproducts.product_sale_price_status, tblproducts.product_sale_price, tblproduct_options.option_text, tblproduct_options.option_upcharge,
CASE
WHEN (tblproducts.product_sale_price_status = 'Y')
    CASE
    WHEN (tblproduct_options.option_upcharge IS NOT NULL)
        THEN (tblshopping_cart.product_qty * (tblproducts.product_sale_price + tblproduct_options.option_upcharge)) 
        ELSE (tblshopping_cart.product_qty * tblproducts.product_sale_price)    
    END
ELSE
    CASE
    WHEN (tblproduct_options.option_upchage IS NOT NULL)
        THEN (tblshopping_cart.product_qty * (tblproducts.product_price + tblproduct_options.option_upcharge))
        ELSE (tblshopping_cart.product_qty * tblproducts.product_price)
    END
END AS product_total
FROM tblshopping_cart
INNER JOIN tblproducts ON tblshopping_cart.product_id = tblproducts.product_id
LEFT JOIN tblproduct_options ON tblshopping_cart.product_option = tblproduct_options.option_product_id
ORDER BY tblshopping_cart.product_qty ASC

Сбой с сообщением:

CASE
    WHEN (tblproduct_options.option_upcharge IS NOT NULL)
        THEN (tblshopping_' at line 4
17
задан Taryn 23 July 2012 в 18:59
поделиться