我有两张表,一张是付款周期,另一张是按年、按月等需要支付的东西。
我正在以这种方式查询数据库:
SELECT
L.UserID,
U.Username,
L.CostPerCycle,
CT.CycleType,
CASE L.CycleTypeID
WHEN L.CycleTypeID = 1 THEN L.CostPerCycle * 12
WHEN L.CycleTypeID = 2 THEN L.CostPerCycle * 3
WHEN L.CycleTypeID = 3 THEN L.CostPerCycle * 2
WHEN L.CycleTypeID = 4 THEN L.CostPerCycle
WHEN L.CycleTypeID = 5 THEN L.CostPerCycle
END AS AnnualCost
FROM
Links L
LEFT JOIN Users U ON L.UserID = U.UserID
LEFT JOIN CycleTypes CT ON L.CycleTypeID = CT.CycleTypeID
WHERE
L.CycleTypeID <> 6;
问题是 MySQL 返回 NULL 值而不是乘法结果,我不确定为什么。
我注意到只评估了第一个条件,但我不确定其他条件是怎么回事。
换句话说:
如果有一条记录带有 CycleTypeID = 1
,则 MySQL 将 CostPerCycle
乘以 12。但是,如果 CycleTypeID 与第一个条件不同,则 MySQL 会做一些事情,我我不确定它做了什么基本上“忽略”了我的其余条件。
希望这些信息足以为我指明正确的方向!
谢谢!
最佳答案
这是你想要的case
语句:
CASE
WHEN L.CycleTypeID = 1 THEN L.CostPerCycle * 12
WHEN L.CycleTypeID = 2 THEN L.CostPerCycle * 3
WHEN L.CycleTypeID = 3 THEN L.CostPerCycle * 2
WHEN L.CycleTypeID = 4 THEN L.CostPerCycle
WHEN L.CycleTypeID = 5 THEN L.CostPerCycle
END AS AnnualCost;
您正在混合两种不同形式的语句。您也可以将其表述为:
CASE L.CycleTypeID
WHEN 1 THEN L.CostPerCycle * 12
WHEN 2 THEN L.CostPerCycle * 3
WHEN 3 THEN L.CostPerCycle * 2
WHEN 4 THEN L.CostPerCycle
WHEN 5 THEN L.CostPerCycle
END AS AnnualCost;
您的版本返回 NULL
值的原因是因为它正在将 L.CycleTypeId
与表达式 L.CycleTypeId = x
的值进行比较.后一个表达式是 0 或 1。唯一可能匹配的是 ids 0
和 1
。其他一切都会失败。如果没有 else
子句,这些将获得 NULL
值。
关于MySQL 案例仅评估第一个条件。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18666870/