【问题标题】:Multiple condition in one case statement using oracle使用 oracle 的一个案例语句中的多个条件
【发布时间】:2021-03-24 21:44:22
【问题描述】:

我有以下 sql 和结果:

SELECT oh.order_id,disallow_short_ship,sm.number
FROM table1 oh
    LEFT JOIN table2 sm
        ON sm.client_id = oh.client_id
            AND sm.site_id = oh.from_site_id
            AND sm.order_id = oh.order_id
WHERE oh.order_id = 'abc'
GROUP BY oh.order_id,oh.disallow_short_ship,sm.number
ORDER BY oh.order_id desc;

结果:

order_id   disallow_short_ship      number 
abc        null                     2107
abc        null                     2108

预期的结果是把case条件 如果订单的结果不止一个,那么 比较两个数字列, 更大的数字(2108)应该有disallow_short_ship = 'Y' 结果是少数 (2107) disallow_short_ship = 'N'

我尝试为disallow_short_ship 列写case 语句,但我需要设置两个条件吗 在一个案例陈述中。

预期结果:

order_id   disallow_short_ship   number 
abc        N                     2107
abc        Y                     2108

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    使用窗口函数和case 表达式:

    SELECT oh.order_id, disallow_short_ship, sm.number,
           (CASE WHEN COUNT(*) OVER (PARTITION BY oh.order_id) > 1 AND
                      ROW_NUMBER() OVER (PARTITION BY oh.order_id ORDER BY number) = 1
                 THEN 'N'
                 WHEN COUNT(*) OVER (PARTITION BY oh.order_id) > 1 AND
                      ROW_NUMBER() OVER (PARTITION BY oh.order_id ORDER BY number DESC) = 1
                 THEN 'Y'
                 ELSE disallow_short_ship
            END) as disallow_short_ship             
    FROM table1 oh LEFT JOIN
         table2 sm
         ON sm.client_id = oh.client_id AND
            sm.site_id = oh.from_site_id AND
            sm.order_id = oh.order_id
    WHERE oh.order_id = 'abc'
    GROUP BY oh.order_id, oh.disallow_short_ship, sm.number
    ORDER BY oh.order_id desc;
    

    【讨论】:

    • 2112: -30483-ORA-30483: 窗口函数在此处不允许出现错误
    • 运行查询时出现上述错误ORA-30483: window functions are not allowed here getting error here
    • @user2907032 。 . .你能设置一个 dbfiddle 吗?
    • 这是我在其中添加此案例条件的大型 xml 文件提取查询,运行此正常查询时我没有收到任何错误。但是当我添加为我的大型 sql 的一部分时,它开始给出错误 ORA-30483:
    • 还有其他方法可以实现吗?
    猜你喜欢
    • 2023-02-05
    • 1970-01-01
    • 2021-11-07
    • 2014-03-15
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    相关资源
    最近更新 更多