有table “user_tb”:
id name
1 aa
2 bb
-1 aa
-2 ee
4 ff 想得到结果集:
id name
1 aa
2 bb
-2 ee
4 ff 就是说当name字段有重复时只显示id为正数的记录,如:
记录 “1 aa” ,“-1 aa”只显示第一条记录请问怎么用一条查询语句实现?
id name
1 aa
2 bb
-1 aa
-2 ee
4 ff 想得到结果集:
id name
1 aa
2 bb
-2 ee
4 ff 就是说当name字段有重复时只显示id为正数的记录,如:
记录 “1 aa” ,“-1 aa”只显示第一条记录请问怎么用一条查询语句实现?
解决方案 »
- 用LIUNX 红帽5.2企业版 安装ORACLE 10G遇到了奇怪的问题
- 新手发问!!
- 我在2003下ASP.NET应用下连oracle92然后报System.Data.OracleClient requires Oracle client software version 8.1.7 or greater这个错,
- 关于dblink双向复制的问题?
- 菜鸟问题!相当菜了。
- 求大神帮忙。。。。
- 高手请进,100分相送
- 我在安装oracle9i后一切正常,能通过delphi(BDE)连接到oracle,但重新启动时报错啊19011
- 请教:9i下能否将某个用户下的某个表导出直接生成文本文件?
- 请问参数为一个数组的函数,怎么用JAVA调用?还是100分。
- java.sql.SQLException: 类型长度大于最大值
- 请教关于exp命令导出dump文件的的性能问(表中含有大量blob字段),在此谢谢大家了!
where id>0 or
not exist
(select 1 from user_tb t2 where t1.name=t2.name and t2.id>0) 期待更好的...
where (id,name) not in(
select abs(id),name
from user_tb
group by abs(id),name
having count(*)>1)
or ((id,name) in(
select abs(id),name
from user_tb
group by abs(id),name
having count(*)>1) and id>0)
select * from user_tb
where id>0
union
select * from user_tb
where id<0
and id not in (select id from user_tb where id>0)
SQL> select max(ut.sid) as sid,
2 ut.sname
3 from user_tb ut
4 group by ut.sname; SID SNAME
---------- ----------
1 aa
2 bb
-2 ee
4 ff
id name
1 aa
2 bb
-1 aa
3 aa正数中又多个name一样的;那么数据就少了;
---------- ----------
1 aa
2 bb
-1 aa
-2 ee
4 ff
3 aa6 rows selected.Elapsed: 00:00:00.12
T@ORA>select id,n from (select id,n,rank() over (partition by abs(id),n order by (id) desc,n) r from t ) where r = 1; ID N
---------- ----------
1 aa
2 bb
-2 ee
3 aa
4 ffElapsed: 00:00:00.09
T@ORA>
from user_tb
group by name
1楼,2楼,3楼 结果虽然是正确的,但是当user_tb是一个很大的结果集或是多表关联查询时明显效率会下降;
4楼,7楼 正如5楼所说,当数据为:
ID NAME
1 aa
2 bb
-5 aa
-7 ee
4 ff
3 aa
时,记录“3 aa”是查不到的;6楼的方法我觉得很好,但当数据集为以上情况时记录“3 aa”也是查不到的,所以我修改为select id, name
from (select id,
name,
case
when count(*) over(partition by name) > 1 and id < 0 then
0
else
1
end r
from user_tb)
where r=1;不知道还有没有更好的方法。