我有一个名为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查询中进行管理?
答案 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
(我假设State
是number
)?
select TestName,
Max(State) as State
group by TestName