Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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 基于WHERE子句中的条件进行筛选_Sql_Oracle - Fatal编程技术网

Sql 基于WHERE子句中的条件进行筛选

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

我有一张桌子,如果有,我必须从两张桌子中挑一张。例如,如果一个ID已接受并结算,我只需选择其余ID。只有已接受/已结算的始终是副本

输入:

   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