Sql 如何使用行号和分区查找重复值

Sql 如何使用行号和分区查找重复值,sql,oracle,duplicates,Sql,Oracle,Duplicates,我想知道如何使用以下查询获取所有重复的值。请告诉我查询的错误 问候,, 伊夫特哈 查询: SELECT SC_CD,DIST_CD,THA_CD,UN_CD,FP_ID, row_number() over(partition BY SC_CD, DIST_CD, THA_CD, UN_CD, FP_ID order by FP_ID) rn FROM tmp_emp_area WHERE rn >1 SQL>/其中rn>1 *第4行错误:ORA-00904:

我想知道如何使用以下查询获取所有重复的值。请告诉我查询的错误

问候,, 伊夫特哈

查询:

  SELECT SC_CD,DIST_CD,THA_CD,UN_CD,FP_ID,
    row_number() over(partition BY SC_CD, DIST_CD, THA_CD, UN_CD, FP_ID order by FP_ID) rn
    FROM tmp_emp_area
    WHERE rn >1
SQL>/其中rn>1 *第4行错误:ORA-00904:“RN”:标识符无效

请检查以下两个结果,这是我在运行两个不同的查询以获得重复项后得到的结果。一个显示92列,另一个显示96列

select SC_CD,DIST_CD,THA_CD,UN_CD,FP_ID,count(fp_id)  
from tmp_emp_area 
group by SC_CD,DIST_CD,THA_CD,UN_CD,FP_ID 
having count(fp_id)>1
/

SC DI TH UN_ FP_I COUNT(FP_ID)
-- -- -- --- ---- ------------
14 61 02 022 5J85            2
14 61 02 098 5J85            3
14 64 02 004 5J85            2
14 64 02 002 5J85            2
14 60 19 060 5F77            2
14 60 13 077 5F77            2
14 61 06 006 5D51            2
14 61 07 013 5D51            2
14 61 07 083 5D51            2
14 61 06 010 5D51            2
14 61 01 015 5R44            2
14 61 08 027 5R44            2
14 61 01 057 5R44            2
14 61 01 067 5R44            2
14 61 05 001 5R44            2
14 61 05 003 5R44            2
14 61 02 009 5J85            2
14 60 13 078 5F77            2
14 61 06 007 5D51            2
14 61 01 021 5R44            2
14 61 01 029 5R44            2

SC DI TH UN_ FP_I COUNT(FP_ID)
-- -- -- --- ---- ------------
14 61 01 065 5R44            2
14 61 01 069 5R44            2
14 64 03 013 5J85            2
14 61 02 014 5J85            2
14 61 02 089 5J85            2
14 60 19 132 5F77            2
14 60 19 134 5F77            2
14 61 07 086 5D51            2
14 61 06 035 5D51            2
14 61 06 014 5D51            2
14 61 01 031 5R44            2
14 61 01 036 5R44            2
14 61 01 041 5R44            2
14 61 02 092 5J85            3
14 61 02 074 5J85            3
14 61 02 088 5J85            2
14 61 02 109 5J85            2
14 60 19 014 5F77            2
14 61 07 015 5D51            2
14 61 06 008 5D51            2
14 61 06 016 5D51            2

SC DI TH UN_ FP_I COUNT(FP_ID)
-- -- -- --- ---- ------------
14 61 05 047 5R44            2
14 61 01 018 5R44            2
14 61 01 055 5R44            2
14 61 01 066 5R44            2
14 61 01 024 5R44            2
14 61 02 093 5J85            3
14 64 02 011 5J85            2
14 64 02 003 5J85            2
14 61 09 002 5J85            2
14 61 02 081 5J85            2
14 61 05 053 5D51            2
14 61 07 087 5D51            2
14 61 06 036 5D51            2
14 61 06 020 5D51            2
14 61 01 076 5R44            2
14 61 02 059 5R44            2
14 61 02 033 5J85            2
14 64 02 008 5J85            2
14 64 02 020 5J85            2
14 61 02 097 5J85            2
14 61 02 017 5J85            2

SC DI TH UN_ FP_I COUNT(FP_ID)
-- -- -- --- ---- ------------
14 61 02 082 5J85            2
14 61 01 077 5R44            2
14 61 05 046 5R44            2
14 61 01 017 5R44            2
14 61 01 054 5R44            2
14 64 02 030 5J85            2
14 61 02 010 5J85            2
14 61 02 103 5J85            2
14 64 02 006 5J85            2
14 64 03 020 5J85            2
14 61 02 105 5J85            2
14 61 02 080 5J85            2
14 61 02 151 5J85            2
14 60 19 059 5F77            2
14 61 06 045 5D51            2
14 61 01 075 5R44            2
14 61 01 056 5R44            2
14 61 01 020 5R44            2
14 61 05 007 5R44            2
14 61 01 053 5R44            2
14 61 01 078 5R44            2

SC DI TH UN_ FP_I COUNT(FP_ID)
-- -- -- --- ---- ------------
14 61 02 013 5J85            2
14 64 02 010 5J85            2
14 64 02 001 5J85            2
14 61 02 077 5J85            2
14 61 07 033 5D51            2
14 61 01 033 5R44            2
14 61 01 068 5R44            2
14 61 01 073 5R44            2

92 rows selected.



  select *
 from
  (
    SELECT SC_CD,DIST_CD,THA_CD,UN_CD,FP_ID,
       row_number() over(partition BY SC_CD, DIST_CD, THA_CD, UN_CD, FP_ID order by FP_ID) rn
    FROM tmp_emp_area
  ) dt
 WHERE rn >1
SQL> /


SC DI TH UN_ FP_I        RN
-- -- -- --- ---- ---------
14 60 13 077 5F77         2
14 60 13 078 5F77         2
14 60 19 014 5F77         2
14 60 19 059 5F77         2
14 60 19 060 5F77         2
14 60 19 132 5F77         2
14 60 19 134 5F77         2
14 61 01 015 5R44         2
14 61 01 017 5R44         2
14 61 01 018 5R44         2
14 61 01 020 5R44         2
14 61 01 021 5R44         2
14 61 01 024 5R44         2
14 61 01 029 5R44         2
14 61 01 031 5R44         2
14 61 01 033 5R44         2
14 61 01 036 5R44         2
14 61 01 041 5R44         2
14 61 01 053 5R44         2
14 61 01 054 5R44         2
14 61 01 055 5R44         2

SC DI TH UN_ FP_I        RN
-- -- -- --- ---- ---------
14 61 01 056 5R44         2
14 61 01 057 5R44         2
14 61 01 065 5R44         2
14 61 01 066 5R44         2
14 61 01 067 5R44         2
14 61 01 068 5R44         2
14 61 01 069 5R44         2
14 61 01 073 5R44         2
14 61 01 075 5R44         2
14 61 01 076 5R44         2
14 61 01 077 5R44         2
14 61 01 078 5R44         2
14 61 02 009 5J85         2
14 61 02 010 5J85         2
14 61 02 013 5J85         2
14 61 02 014 5J85         2
14 61 02 017 5J85         2
14 61 02 022 5J85         2
14 61 02 033 5J85         2
14 61 02 059 5R44         2
14 61 02 074 5J85         2

SC DI TH UN_ FP_I        RN
-- -- -- --- ---- ---------
14 61 02 074 5J85         3
14 61 02 077 5J85         2
14 61 02 080 5J85         2
14 61 02 081 5J85         2
14 61 02 082 5J85         2
14 61 02 088 5J85         2
14 61 02 089 5J85         2
14 61 02 092 5J85         2
14 61 02 092 5J85         3
14 61 02 093 5J85         2
14 61 02 093 5J85         3
14 61 02 097 5J85         2
14 61 02 098 5J85         2
14 61 02 098 5J85         3
14 61 02 103 5J85         2
14 61 02 105 5J85         2
14 61 02 109 5J85         2
14 61 02 151 5J85         2
14 61 05 001 5R44         2
14 61 05 003 5R44         2
14 61 05 007 5R44         2

SC DI TH UN_ FP_I        RN
-- -- -- --- ---- ---------
14 61 05 046 5R44         2
14 61 05 047 5R44         2
14 61 05 053 5D51         2
14 61 06 006 5D51         2
14 61 06 007 5D51         2
14 61 06 008 5D51         2
14 61 06 010 5D51         2
14 61 06 014 5D51         2
14 61 06 016 5D51         2
14 61 06 020 5D51         2
14 61 06 035 5D51         2
14 61 06 036 5D51         2
14 61 06 045 5D51         2
14 61 07 013 5D51         2
14 61 07 015 5D51         2
14 61 07 033 5D51         2
14 61 07 083 5D51         2
14 61 07 086 5D51         2
14 61 07 087 5D51         2
14 61 08 027 5R44         2
14 61 09 002 5J85         2

SC DI TH UN_ FP_I        RN
-- -- -- --- ---- ---------
14 64 02 001 5J85         2
14 64 02 002 5J85         2
14 64 02 003 5J85         2
14 64 02 004 5J85         2
14 64 02 006 5J85         2
14 64 02 008 5J85         2
14 64 02 010 5J85         2
14 64 02 011 5J85         2
14 64 02 020 5J85         2
14 64 02 030 5J85         2
14 64 03 013 5J85         2
14 64 03 020 5J85         2

96 rows selected.

不能在其中使用别名,请切换到派生表:

select *
from
 (
   SELECT SC_CD,DIST_CD,THA_CD,UN_CD,FP_ID,
      row_number() over(partition BY SC_CD, DIST_CD, THA_CD, UN_CD, FP_ID order by FP_ID) rn
   FROM tmp_emp_area
 ) dt
WHERE rn >1

你不能改用分组方式吗?我想这会更简单。@pablomatico,我做了,请看一下更新后的查询结果。两个不同的查询有不同的结果。在第二个查询(分区依据的查询)中,您选择了行数>1的每一行。这意味着在一个包含3行的组中,您将选择其中的2行(即第2行和第3行)。在第一个查询(带有group by的查询)中,同一个组将只生成一个count(fp_id)=3的行。这就是为什么结果中的行数不同的原因。@pablomatico,谢谢你的解释。我尝试了你的查询,得到了另一个不同的结果。用结果检查最新的查询。谢谢
select *
from
 (
   SELECT SC_CD,DIST_CD,THA_CD,UN_CD,FP_ID,
      row_number() over(partition BY SC_CD, DIST_CD, THA_CD, UN_CD, FP_ID order by FP_ID) rn
   FROM tmp_emp_area
 ) dt
WHERE rn >1