Sql 使用oracle的一种情况下的多个条件语句
我有以下sql和结果: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
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时,它开始出现错误:有没有其他方法来实现这一点?