如果值在Oracle查询中重复,如何获取正确的值

时间:2018-07-04 12:05:43

标签: c# sql .net 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查询中进行管理?

2 个答案:

答案 0 :(得分:3)

这可以使用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,在testname有多行的情况下将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

答案 1 :(得分:2)

您是否正在寻找Group By(我假设Statenumber)?

  select TestName,
         Max(State) as State
group by TestName