0

unique_table以下のようなデータで呼び出されるテーブルがあります。

ID        NAME 
1         venkat 
2         subash 
3         venkat 
4         subash 
5         venkat 
6         subash 

上記のテーブルをクエリして、以下のように出力したいと思います。

ID        NAME      MATCHED_ID 
3         venkat    1 
4         subash    2             
5         venkat    1             
6         subash    2 
4

3 に答える 3

1

xQbertの答えの代わりに、分析関数を使用して、結合せずにこれを行うこともできます。

select id, name, matched_id
from (
    select id,
        name,
        first_value(id) over (partition by name order by id) as matched_id
    from unique_table
)
where id != matched_id
order by id;

       ID NAME   MATCHED_ID
---------- ------ ----------
         3 venkat          1 
         4 subash          2 
         5 venkat          1 
         6 subash          2 

内部クエリで、各;first_value()の最初のID(つまり最小の番号)を提供します。name次に、外部クエリは、行がそれ自体と一致する場合を除外します。したがって、重複のみがリストされ、それぞれの最初の外観は表示されません。

于 2013-02-25T14:21:35.253 に答える
1
SELECT YourColumn, COUNT(*) MatchedCount
FROM YourTable
GROUP BY YourColumn
HAVING COUNT(*) > 1
ORDER BY COUNT(*) DESC

http://blog.sqlauthority.com/2007/07/11/sql-server-count-duplicate-records-rows/

于 2013-02-25T13:57:52.227 に答える
1
Select T2.ID, T2.name, min(T1.ID) as matched_ID
FROM D t1
INNER JOIN D t2 on t1.ID < T2.ID 
and T1.name = T2.name 
Group by T2.name, T2.ID
order by ID


create table D as (
Select 1 as ID ,'venkat' as name from dual UNION
SELECT 2,'subash' from dual UNION 
SELECT 3,'venkat' from dual UNION
SELECT 4,'subash' from dual UNION
SELECT 5 ,'venkat' from dual UNION
SELECT 6,'subash' from dual) 

結果は

ID      Name    Matched ID
3       venkat  1
4       subash  2
5       venkat  1
6       subash  2
于 2013-02-25T14:10:07.140 に答える