Sql 基于WHERE子句中的条件进行筛选
我有一张桌子,如果有,我必须从两张桌子中挑一张。例如,如果一个ID已接受并结算,我只需选择其余ID。只有已接受/已结算的始终是副本 输入:Sql 基于WHERE子句中的条件进行筛选,sql,oracle,Sql,Oracle,我有一张桌子,如果有,我必须从两张桌子中挑一张。例如,如果一个ID已接受并结算,我只需选择其余ID。只有已接受/已结算的始终是副本 输入: SELECT * FROM TABLE WHERE CASE WHEN "Status" IN ('ACCEPTED','SETTLED') THEN 'SETTLED' WHEN "Status" IN ('ACCEPTED') THEN 'ACCEPTED' ELS
SELECT * FROM TABLE
WHERE CASE WHEN "Status" IN ('ACCEPTED','SETTLED') THEN 'SETTLED'
WHEN "Status" IN ('ACCEPTED') THEN 'ACCEPTED'
ELSE "Status" END In ('SETTLED','ACCEPTED')
输出:
SELECT * FROM TABLE
WHERE CASE WHEN "Status" IN ('ACCEPTED','SETTLED') THEN 'SETTLED'
WHEN "Status" IN ('ACCEPTED') THEN 'ACCEPTED'
ELSE "Status" END In ('SETTLED','ACCEPTED')
已尝试查询:
SELECT * FROM TABLE
WHERE CASE WHEN "Status" IN ('ACCEPTED','SETTLED') THEN 'SETTLED'
WHEN "Status" IN ('ACCEPTED') THEN 'ACCEPTED'
ELSE "Status" END In ('SETTLED','ACCEPTED')
这是一个选项(第1-7行中的示例数据;查询从第8行开始)。它对状态进行排序,以便先确定状态,然后确定其他状态
SQL> with test (id, status, amount) as
2 (select 1, 'ACCEPTED', 13 from dual union all
3 select 1, 'SETTLED' , 13 from dual union all
4 select 2, 'SETTLED' , 155 from dual union all
5 select 3, 'ACCEPTED', 123 from dual union all
6 select 4, 'REJECTED', 140 from dual
7 )
8 select id, status, amount
9 from (select id, status, amount,
10 row_number() over (partition by id
11 order by case when status = 'SETTLED' then 1 else 2 end) rn
12 from test
13 )
14 where rn = 1;
ID STATUS AMOUNT
---------- -------- ----------
1 SETTLED 13
2 SETTLED 155
3 ACCEPTED 123
4 REJECTED 140
SQL>
如果您的组由
ID
和Amount
定义,您可以执行以下操作:
SELECT
t.ID,
MAX(t.Status),
t.Amount
FROM t
GROUP BY t.ID, t.Amount
ORDER BY t.ID