【问题标题】:Nested case statement in MYSQLMYSQL中的嵌套case语句
【发布时间】:2020-07-29 02:48:42
【问题描述】:
SELECT CREX.RECODE,
(CASE WHEN ARX.ARRATE <> 0 THEN
    ARX.ARRATE
ELSE
    (CASE WHEN SBX.SBCLBL-SBX.SBDRBL > ARX.ARAMT1 THEN
        (CASE WHEN SBX.SBCLBL-SBX.SBDRBL > ARX.ARAMT2 THEN
            (CASE WHEN SBX.SBCLBL-SBX.SBDRBL > ARX.ARAMT3 THEN
                (CASE WHEN SBX.SBCLBL-SBX.SBDRBL > ARX.ARAMT4 THEN
                    (CASE WHEN SBX.SBCLBL-SBX.SBDRBL > ARX.ARAMT5 THEN
                        (CASE WHEN SBX.SBCLBL-SBX.SBDRBL > ARX.ARAMT6 THEN
                        ELSE ARX.ARRAT6 END)
                    ELSE ARX.ARRAT5 END)
                ELSE ARX.ARRAT4 END)
            ELSE ARX.ARRAT3 END)
        ELSE ARX.ARRAT2 END)
    ELSE ARX.ARRAT1 END)
END) AS BUNGA,

ROW_NUMBER() OVER(PARTITION BY CREX.RECODE ORDER BY ARX.ARDTVL DESC) AS RN
FROM CTE_M5RE CREX
LEFT JOIN CORE_BMI.M6SB SBX ON (CREX.RECODE = SBX.SBRECO)
LEFT JOIN CORE_BMI.H8AR ARX ON (CREX.RECODE = ARX.ARRECO)

我正在编写一个 MySQL 查询,其中返回的一些列需要根据相当多的条件进行计算。

有人知道如何修复我的代码吗?

【问题讨论】:

  • 您缺少CASE WHEN SBX.SBCLBL-SBX.SBDRBL &gt; ARX.ARAMT6 THEN 的值

标签: mysql sql join select case


【解决方案1】:

我确实怀疑您的嵌套表达式可以简化为:

CASE 
    WHEN ARX.ARRATE <> 0 THEN ARX.ARRATE
    WHEN SBX.SBCLBL - SBX.SBDRBL <= ARX.ARAMT1 THEN ARX.ARRAT1
    WHEN SBX.SBCLBL - SBX.SBDRBL <= ARX.ARAMT2 THEN ARX.ARRAT2
    WHEN SBX.SBCLBL - SBX.SBDRBL <= ARX.ARAMT3 THEN ARX.ARRAT3
    WHEN SBX.SBCLBL - SBX.SBDRBL <= ARX.ARAMT4 THEN ARX.ARRAT4
    WHEN SBX.SBCLBL - SBX.SBDRBL <= ARX.ARAMT5 THEN ARX.ARRAT5
    WHEN SBX.SBCLBL - SBX.SBDRBL <= ARX.ARAMT6 THEN ARX.ARRAT6
END AS BUNGA

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2016-12-10
    • 1970-01-01
    相关资源
    最近更新 更多