我有两个表,一个表包含付款周期,另一个表包含需要每年,每月等支付的费用。
我以这种方式查询数据库:
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会做一些事情,我不确定它是做什么的基本上'忽略'其余的条件。
希望有足够的信息指出我正确的方向!
谢谢!
答案 0 :(得分:3)
这是您想要的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.唯一可能匹配的是id 0
和1
。其他一切都将落空。如果没有else
子句,则会获得NULL
个值。