c# - 如果值在 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 查询中进行管理?
解决方案
这可以使用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
推荐阅读
- asp.net-core - .Net Core 3 自定义授权策略 - 访问动作动词
- python - 如何在熊猫数据框中创建滑动窗口并应用函数
- c# - 具有递归 ConfigurationElement 的自定义配置部分
- python - 如何在悬停文本 Plotly 中打破一条长线?
- arrays - 在没有循环的情况下将每一行的矩阵的不同元素均衡为零
- c# - 从 azure 部署的机器人向 ms 团队发送主动消息
- python - 从列表项的末尾删除 \n
- php - 带有条件的订单明细表下的文本
- graphql - Strapi GraphQL - 按项目计数子查询排序
- android - 带有 Smartlook SDK 的 Firebase crashlytics 未报告崩溃