0

我有两张表,一张包含付款周期,另一张包含需要支付的费用,具体取决于每年、每月等。

我以这种方式查询数据库:

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 将乘以CostPerCycle12。但是,如果 CycleTypeID 与第一个条件不同,那么 MySQL 会做一些事情,我不确定它会做什么,这基本上会“忽略”我的其余条件。

希望有足够的信息可以为我指明正确的方向!

谢谢!

4

1 回答 1

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。唯一可能匹配的是 ids01. 其他一切都会失败。没有else子句,这些获取NULL值。

于 2013-09-06T21:34:11.037 回答