27

SQLステートメントでCASELogicを初めて使用しました。CASEステートメントを削除するとすべてが機能するため、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
4

3 に答える 3

50

THEN最初のCASEステートメントにがありません。(申し訳ありませんが、テーブルエイリアスを追加する必要がありました

SELECT sc.session_id
    , sc.product_id
    , sc.product_qty
    , sc.product_option
    , p.product_title
    , p.product_price
    , p.product_sale_price_status
    , p.product_sale_price
    , po.option_text
    , po.option_upcharge
    , CASE
        WHEN (p.product_sale_price_status = 'Y')
        THEN <-- add this
            CASE
            WHEN (po.option_upcharge IS NOT NULL)
                THEN (sc.product_qty * (p.product_sale_price + po.option_upcharge)) 
                ELSE (sc.product_qty * p.product_sale_price)    
            END
        ELSE
            CASE
            WHEN (po.option_upchage IS NOT NULL)
                THEN (sc.product_qty * (p.product_price + po.option_upcharge))
                ELSE (sc.product_qty * p.product_price)
            END
        END AS product_total
FROM tblshopping_cart sc
INNER JOIN tblproducts p
    ON sc.product_id = p.product_id
LEFT JOIN tblproduct_options po
    ON sc.product_option = po.option_product_id
ORDER BY sc.product_qty ASC
于 2012-07-23T19:03:26.467 に答える
7

THENあなたは外側に欠けているようですCASE

CASE
WHEN (tblproducts.product_sale_price_status = 'Y') THEN
                                                   ^^^^ add this
于 2012-07-23T19:02:24.277 に答える
4

私はあなたの問題はあなたがあなたのケースを書く方法だと思います。

あなたは最初のときの後にTHENを逃しました。あなたもENDを逃しました。

CASE
WHEN (tblproducts.product_sale_price_status = 'Y')
    THEN 
    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
于 2012-07-23T19:09:19.903 に答える