首页 > 解决方案 > 如果值在 oracle 查询中重复,如何取正确的值

问题描述

我有一个名为的表TestTable,其中包含以下数据

slno   TESTNAME    STATE

1.  Rahul       100
2.  Ravi        100
3.  Rahul       90
4.  sasi        100
5.  Peter       100
6.  Kiran       90

我的目标是如果TESTNAME被复制,那么我必须采取TESTNAME哪些是有的STATE =100,所以在这里Rahul 100

预期结果如下

slno   TESTNAME    STATE

1.  Rahul       100
2.  Ravi        100
4.  sasi        100
5.  Peter       100
6.  Kiran       90

我使用了以下查询,但没有运气

select TESTNAME,STATE from TestTable order by slno,to_number(STATE).

我是否需要将所有值放入 c# 中的数据表和进程中,或者我们可以在 oracle 查询中进行管理?

标签: c#sql.netoracle

解决方案


这可以使用union all.

select slno,TESTNAME,STATE 
from TestTable 
where state=100
union all
select slno,TESTNAME,STATE 
from TestTable 
where state<>100
and not exists (select 1 
                from TestTable 
                where testname=t.testname and state=100
               ) 

或使用row_number自定义order by条件,优先 state=100 行,以防测试名称有多行。

select slno,testname,state
from (select t.*,row_number() over(partition by testname order by case when state=100 then 1 else 2 end) as rnum
      from tbl t
     ) t
where rnum=1

推荐阅读