Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用oracle的一种情况下的多个条件语句_Sql_Oracle - Fatal编程技术网

Sql 使用oracle的一种情况下的多个条件语句

Sql 使用oracle的一种情况下的多个条件语句,sql,oracle,Sql,Oracle,我有以下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

我有以下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
order_id   disallow_short_ship   number 
abc        N                     2107
abc        Y                     2108
预期结果是将案例置于条件下 如果订单有多个结果,则 比较数字列和, 较大的数字(
2108
)应具有
不允许短装运='Y'
对于少量(
2107
不允许短船='N'

我曾尝试为
disallow\u short\u ship
列编写案例语句,但是否需要设置两个条件 在一个案例陈述中

预期结果:

order_id   disallow_short_ship      number 
abc        null                     2107
abc        null                     2108
order_id   disallow_short_ship   number 
abc        N                     2107
abc        Y                     2108

使用窗口函数和
大小写
表达式:

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:此处不允许使用窗口函数获取错误此处我在运行查询时获取上述错误A-30483:此处不允许使用窗口函数获取错误here@user2907032 . . . 您可以设置一个dbfiddle吗?这是一个大型xml文件提取查询,我在其中添加了这个case条件,当运行这个普通查询时,我没有得到任何错误。但是,当我在我的大型sql中添加ORA-30483时,它开始出现错误:有没有其他方法来实现这一点?