我有以下查询,它提供了我想要的数据,但是,我需要CASE语句中Cash,Credit和Check列的总和。我怎样才能做到这一点?如果可能的话,我想使用一个过程。如何获得列的总数
此外,对我来说,这个查询似乎并没有那么高效。任何人都可以改进这一点?在我看来,我应该能够设置变量,然后在我的CASE语句中使用它们,但不知道它是如何完成的。
SELECT
t1.order_id,
t3.price * SUM(t1.quantity) AS subtotal,
(SUM(t1.discount) + t3.discount)/100 AS disc,
t3.price * SUM(t1.quantity) * (t3.tax_state + t3.tax_fed) /100 AS tax,
t3.price * SUM(t1.quantity) - (SUM(t1.discount) + t3.discount)/100 + t3.price * SUM(t1.quantity) * (t3.tax_state + t3.tax_fed) /100 AS total,
CASE t2.payment_type WHEN 'Cash' THEN t3.price * SUM(t1.quantity) - (SUM(t1.discount) + t3.discount)/100 + t3.price * SUM(t1.quantity) * (t3.tax_state + t3.tax_fed) /100 ELSE 0.00 END AS cash,
CASE t2.payment_type WHEN 'Card' THEN t3.price * SUM(t1.quantity) - (SUM(t1.discount) + t3.discount)/100 + t3.price * SUM(t1.quantity) * (t3.tax_state + t3.tax_fed) /100 ELSE 0.00 END AS card,
CASE t2.payment_type WHEN 'Check' THEN t3.price * SUM(t1.quantity) - (SUM(t1.discount) + t3.discount)/100 + t3.price * SUM(t1.quantity) * (t3.tax_state + t3.tax_fed) /100 ELSE 0.00 END AS check
FROM pos_item_order AS t1
Join pos_order AS t2 ON t2.order_id = t1.order_id
Join inv_item AS t3 ON t3.item_id = t1.item_id
GROUP BY t1.order_id, t1.item_id
编辑:当我说我“需要的现金,信用卡的总和,并检查列”,我的意思是每列相应的总数。
`与rollup`做你需要的吗? – 2011-01-26 07:49:48
嗯..我以前没有用过。我现在会读一下。感谢您的建议,马丁。 – Jim 2011-01-26 07:52:28
@Martin,看起来'汇总'水平合计行,我需要垂直总和或总计。 – Jim 2011-01-26 07:58:40