我有一个像这样的交易表。 4个字段: 时间 id 类型 金钱
其中一种类型有 3 种不同的子类型 (21,22,23),我想根据 ids 创建其他类型,然后计算每个日期和类型的金额。我就是这样做的。
select date(time), sum(money),
case
when type=2 and id<100 then type=21
when type=2 and id between 100 and 499 then type=22
when type=2 and id>=500 then type=23
when type<>2 then type
end as type
from transactionsTable
where type in (1,2,3,4,21,22,23) and date(time)>='2014-11-01' group by 1,3
一个奇怪的结果是我得到一个 type=0,我在 where 子句中过滤掉了它。 第二件奇怪的事情是我没有得到新创建的类型 21,22,23!
有人能给我指出正确的方向吗?
最佳答案
您不能在 where 中引用类似的类型,也不能在没有某种插入的情况下设置类型。不过,您可以做的是使用此查询的结果编写一个查询来返回您想要的内容。
SELECT DATE(time), SUM(money),
CASE
WHEN type=2 AND id<100
THEN 21
WHEN type=2 AND id BETWEEN 100 AND 499
THEN 22
WHEN type=2 AND id>=500
THEN 23
WHEN type<>2
THEN type
END AS type
FROM transactionsTable
GROUP BY 1,3
HAVING type IN (1,2,3,4,21,22,23) AND DATE(time)>='2014-11-01'
注意:having 子句重新评估结果集,以便您可以在必须包含查询结果的情况下引用类型
关于Mysql if 子句序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26977845/