oracle选取相同字段的前几项,如何选取出一个大表里所有A字段相同,B字段不同的记录...

博客讨论了在SQL中如何精确选取特定sysid的数据,排除ID重复且price相同的记录。用户提供了两种方法,但都存在不足,4楼的方法误选了sysid为10的数据,而5楼的方法则多选了sysid为11和12的数据。问题在于如何正确过滤重复ID并保留特定sysid的记录。
摘要由CSDN通过智能技术生成

非常感谢楼上的解答!

我要的是这样的:

SQL> select * from price;

ID              PRICE SYSID

---------- ---------- ----------

10               1300 1

10               2450 2

20               1500 3

20               2000 4

30                800 5

30                800 6

40               1500 7

40               1500 8

40               1500 9

50               1600 10

60               2000 11

60               2000 12

60               2500 13

13 rows selected

然后我要选取出来的是:

ID              PRICE SYSID

---------- ---------- ----------

10               1300 1

10               2450 2

20               1500 3

20               2000 4

60               2500 13

即sysid为1、2、3、4、13的数据。

用4楼的方法,多选了sysid为10的数据--ID号没出现重复的数据不选取;同时少选取了13。

用5楼的方法,多选了sysid为11、12的数据--ID号重复同时price重复的,要消除掉。

附4楼方法:

SQL>  select   id, price,sysid

2      from

3     (select id,

4             price,sysid,

5             count(*) over(partition by id) cnt1,

6            count(distinct price) over(partition by id) cnt2

7      from price)

8      where cnt1 = cnt2;

ID              PRICE SYSID

---------- ---------- ----------

10               1300 1

10               2450 2

20               1500 3

20               2000 4

50               1600 10

5楼方法:

SQL> SELECT UNIQUE A.*

2  FROM price A, price B

3  WHERE A.ID=B.ID

4  AND A.PRICE<>B.PRICE;

ID              PRICE SYSID

---------- ---------- ----------

10               1300 1

10               2450 2

20               1500 3

20               2000 4

60               2000 11

60               2000 12

60               2500 13

7 rows selected

[本帖最后由 wouwouwou 于 2011-8-3 16:50 编辑]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值