2016-07-06 11 views
0

where句の中で "weight"という演算SUMの結果を使用するときに問題が発生します。私はあなたの助けに感謝します。ここでは、クエリは次のとおりです。WHERE句でSUM結果を使用したときのエラー

SELECT o.reference 
    , SUM(od.product_weight * od.product_quantity) weight 
    , SUM(od.total_price_tax_incl) total_paid_products 
    , d.price 
    , o.module 
    , rw.id_range_weight 
    FROM ps_orders o 
    , ps_order_detail od 
    , ps_product p 
    , ps_supplier s 
    , ps_delivery d 
    , ps_address a 
    , ps_state state 
    , ps_range_weight rw 
WHERE o.id_order = od.id_order 
    AND p.id_product = od.product_id 
    AND s.id_supplier = p.id_supplier 
    AND o.id_address_delivery = a.id_address 
    AND a.id_state = state.id_state 
    AND d.id_zone = state.id_zone 
    AND d.id_range_weight = rw.id_range_weight 
    AND rw.delimiter1 <= weight 
    AND weight < rw.delimiter2 
    AND 5 = rw.id_carrier 
    AND p.id_supplier = 1 
    AND YEAR(o.date_upd) = 2016 
    AND MONTH(o.date_upd) = 5 
    AND o.current_state IN(2,3,4,5,15,16) 
    AND o.module IN('paypal','redsys','bankwire') 
GROUP 
    BY o.reference 
ORDER 
    BY o.date_upd DESC 

私は10を使用して、それは完璧に動作数、例えば体重を交換する場合句は... SUM結果、常に値0を持っていないに値「重み」代わりに重量の:

sql result

は、あなたの時間のためにみんなありがとう!

+0

だから問題は何ですか?何が効いていないのですか?どのように機能していないのですか? –

+0

一般的に、SELECT句の集約されていない列もGROUP BY句に含める必要があります。また、古典的な結合構文を使用しないでください。 – Strawberry

+0

こんにちは@SamiKuhmonen、where句で "weight"を使用した場合の結果は、 "0"を使用した場合と同じですが、ウェイト値は決して0ではなく、10、1でなければなりません...理由はわかりませんSUM値を保持しません。 @Strawberryの構文は何が問題なのですか? –

答えて

0

持つといないために、私は、この

HAVING rw.delimiter1 <= weight AND weight < rw.delimiter2 

とも私はそれを知らせるため@Strawberryのおかげため@scaisEdgeのおかげで答えを見つけることが非SELECT句の集約列もGROUP BY句に含める必要があります。ここで

フルクエリ

SELECT o.reference 
    , Sum(od.product_weight * od.product_quantity) AS weight 
    , SUM(od.total_price_tax_incl) AS total_paid_products 
    , d.price 
    , o.module 
    , rw.id_range_weight 
    FROM ps_orders o 
    , ps_order_detail od 
    , ps_product p 
    , ps_supplier s 
    , ps_delivery d 
    , ps_address a 
    , ps_state state 
    , ps_range_weight rw 
WHERE o.id_order = od.id_order 
    AND p.id_product = od.product_id 
    AND s.id_supplier = p.id_supplier 
    AND o.id_address_delivery = a.id_address 
    AND a.id_state = state.id_state 
    AND d.id_zone = state.id_zone 
    AND d.id_range_weight = rw.id_range_weight 
    AND 5 = rw.id_carrier 
    AND p.id_supplier = 1 
    AND year(o.date_upd) = 2016 
    AND month(o.date_upd) = 5 
    AND (o.current_state = 2 
     OR o.current_state = 3 
     OR o.current_state = 4 
     OR o.current_state = 5 
     OR o.current_state = 15 
     OR o.current_state = 16) 
    AND (o.module = 'paypal' 
     OR o.module = 'redsys' 
     OR o.module = 'bankwire') 
GROUP 
    BY o.reference 
    , rw.delimiter1 
    , rw.delimiter2 
HAVING rw.delimiter1 <= weight 
    AND weight < rw.delimiter2 
ORDER 
    BY o.date_upd desc 

は、あなたの時間のためのみんなに感謝しています。

2

集約関数の使用がどこ

SELECT o.reference, Sum(od.product_weight * od.product_quantity) as weight, 
SUM(od.total_price_tax_incl) as total_paid_products, d.price, o.module, rw.id_range_weight 

FROM ps_orders o, ps_order_detail od, ps_product p, ps_supplier s, ps_delivery d, 
ps_address a, ps_state state, ps_range_weight rw 

WHERE o.id_order = od.id_order AND p.id_product = od.product_id AND 
s.id_supplier = p.id_supplier AND o.id_address_delivery = a.id_address 
AND a.id_state = state.id_state AND d.id_zone = state.id_zone 
AND d.id_range_weight = rw.id_range_weight 

AND 5 = rw.id_carrier 
AND p.id_supplier = 1 AND year(o.date_upd) = 2016 AND month(o.date_upd) = 5 
AND (o.current_state = 2 OR o.current_state = 3 OR o.current_state = 4 OR 
o.current_state = 5 OR o.current_state = 15 OR o.current_state = 16) 
AND (o.module = 'paypal' OR o.module = 'redsys' OR o.module = 'bankwire') 

GROUP BY o.reference 

HAVING rw.delimiter1 <= weight AND weight < rw.delimiter2 

ORDER BY o.date_upd desc 
+0

こんにちは@scaisEdge、答えをありがとうが、それは私にエラーが表示されます "不明な列 'rw.delimiter1'の '節があります' –

関連する問題