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

非常感谢楼上的解答!

我要的是这样的:

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 编辑]