【问题标题】:divide the column value if match the case condition in query如果匹配查询中的case条件,则除列值
【发布时间】:2018-01-10 13:51:03
【问题描述】:

我正在尝试将数量手风琴调整为年度或每月状态。

这是 Y = 每年和 M = 每月的列。

period_stats | Amount
Y            | 12070.00
M            | 2580.00

我想根据金额查询金额,如果period_statsY,那么金额应该除以12,如果period_statsM,那么想得到不除的直接金额。

我不是 sql 方面的专家,所以经过一番搜索后我发现我可以做到 在 sql 中使用 case 但我不知道如何使用它。

我已经尝试过这种方式。如果我用错了,请纠正我。

select period_stats, CASE period_stats
WHEN 'Y' THEN (amount / 12) as amount_monthly
ELSE amount END as 'amount_monthly' FROM tbale where id = 1;

如果有人知道任何其他技术,那么将不胜感激,我也想知道这一点。


结论:

正确查询以获得所需的结果。 (通过使用 Sebastian Brosch 的答案)

SELECT 
period_stats, 
ROUND(CASE WHEN (period_stats = 'Y') THEN (amount / 12) ELSE amount END, 2) 
AS 'amount_monthly'
FROM table 
WHERE id = 1;

结果:

amount_monthly
1005

【问题讨论】:

    标签: php mysql case


    【解决方案1】:

    你很接近。您可以使用以下解决方案:

    SELECT 
        period_stats, 
        CASE WHEN (period_stats = 'Y') THEN (amount / 12) ELSE amount END AS 'amount_monthly'
    FROM table 
    WHERE id = 1;
    

    演示: http://sqlfiddle.com/#!9/1521ad/2/0

    上面的查询使用以下语法:

    CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
    

    来源: https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#operator_case


    要仅显示两位小数,您可以使用TRUNCATE(不四舍五入)或ROUND(四舍五入)。

    使用TRUNCATE的解决方案:

    SELECT 
        period_stats, 
        TRUNCATE(CASE WHEN (period_stats = 'Y') THEN (amount / 12) ELSE amount END, 2) AS 'amount_monthly'
    FROM table 
    WHERE id = 1;
    

    使用ROUND的解决方案:

    SELECT 
        period_stats, 
        ROUND(CASE WHEN (period_stats = 'Y') THEN (amount / 12) ELSE amount END, 2) AS 'amount_monthly'
    FROM table 
    WHERE id = 1;
    

    【讨论】:

    • 只有一个查询,结果类似于12313.00000,那么我如何得到它,例如12313.0012313。 @SebastianBrosch
    • 非常感谢您的帮助。并感谢您分享语法,再次感谢您,先生。
    【解决方案2】:

    你可以试试。

            select period_stats , 
            IF(`period_stats`='Y',`Amount`/12 , `Amount`) AS amount_monthly
            FROM table where id = 1;
    

    【讨论】:

    • 感谢@Vijtiwari,您的查询也运行良好,但在 sql 查询中使用 if 条件是一个好习惯?
    • 如果你想得到整数值CAST(columnName AS INT),你可以像下面这样CAST列
    【解决方案3】:

    你可以这样写你的查询:

    SELECT period_stats, 
        CASE period_stats 
        WHEN "Y" THEN Amount/12 
        ELSE Amount 
        END AS 'amount_monthly' 
    FROM tbale where id = 1;
    

    【讨论】:

    • 感谢您的查询也有效。为此。谢谢先生。
    猜你喜欢
    • 2019-11-25
    • 2016-10-08
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 2021-09-30
    相关资源
    最近更新 更多