有三列:
SELECT SUM(IF(order_code BETWEEN ... AND ..., quantity, 0)), -- group1
SUM(IF(order_code BETWEEN ... AND ..., quantity, 0)), -- group2
SUM(IF(order_code BETWEEN ... AND ..., quantity, 0)) -- group3
FROM orders
;
如果你想要一个列与三行:
SELECT group_number,
SUM(quantity)
FROM (SELECT quantity,
CASE WHEN order_code BETWEEN ... AND ... THEN 1 -- group1
WHEN order_code BETWEEN ... AND ... THEN 2 -- group2
WHEN order_code BETWEEN ... AND ... THEN 3 -- group3
ELSE NULL
END AS group_number
FROM orders
) AS t
WHERE group_number IS NOT NULL
GROUP
BY group_number
;
(子查询实际上并不是必要的,但我认为它使得它更清楚发生了什么)。
谢谢你的回答。 **一行三列工作良好**,但**一列三行**让我错误'每个派生表都必须有自己的别名',并且在我修复别名后它工作良好。 – 2012-03-31 19:12:53
@KhaledLela:不客气!我已经添加了你提到的别名。如果我的答案帮助了你,请[接受它](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 :-) – ruakh 2012-03-31 19:14:48
感谢您的快速回答,我正在编辑您的答案,但您先前在我身边。 – 2012-03-31 19:19:45