2017-07-12 3 views
0

からトップ1を除くすべてのデータを選択します。私は私のデータベースから重複TIID番号を返すこのクエリを持って重複データベース

SELECT 
    TIID, CIID 
FROM 
    INST_TASKS 
WHERE 
    CIID IN (SELECT CIID 
      FROM INST_TASKS 
      GROUP BY CIID 
      HAVING COUNT(*) > 1) 

上記のコードは、この結果を返します:

TIID CIID 
------------- 
187831 80162 
187836 80162 
187838 80162 
194628 80522 
194629 80522 
194630 80812 
194631 80812 
194632 80522 
194633 81444 
194634 81444 
194635 80812 
194636 81594 
194637 81594 
194638 81444 
194639 81594 
194640 81626 
194641 81626 
194642 81700 
194643 81626 
194644 81700 
194645 81700 

私が欲しいもの各CIID番号の先頭1を除き、TIIDの番号を選択します。

望ましい結果として次のようになります。あなたは以下のように> 1でROW_NUMBERとフィルタを使用することができます

TIID CIID 
------------- 
187836 80162 
187838 80162 
194629 80522 
194632 80522 
194631 80812 
194635 80812 
194634 81444 
194638 81444 
194637 81594 
194639 81594 
194641 81626 
194643 81626 
194644 81700 
194645 81700 

答えて

1

:以下のように

Select * from (
    Select *, RowN = Row_Number() over(Partition by CIID Order by TIID) from #yourtable) a 
where a.RowN > 1 

出力:

+--------+-------+ 
| TIID | CIID | 
+--------+-------+ 
| 187838 | 80162 | 
| 187836 | 80162 | 
| 194632 | 80522 | 
| 194629 | 80522 | 
| 194635 | 80812 | 
| 194631 | 80812 | 
| 194638 | 81444 | 
| 194634 | 81444 | 
| 194639 | 81594 | 
| 194637 | 81594 | 
| 194643 | 81626 | 
| 194641 | 81626 | 
| 194645 | 81700 | 
| 194644 | 81700 | 
+--------+-------+ 
1

これを試してみてくださいクエリ -

;WITH CTE 
AS (
    SELECT TIID 
     ,CIID 
     ,Row_Number() OVER (
      PARTITION BY CIID ORDER BY TIID 
      ) AS RowNum 
    FROM INST_TASKS 
    ) 
SELECT TIID 
    ,CIID 
FROM CTE 
WHERE RowNum > 1; 
関連する問題