2017-12-18 21 views
0

重複するレコードをビューから削除するにはどうすればよいですか?私は物理的なテーブルの上にそれらを維持する必要がありますが、ビューには、私は重複をしたくない。ここSQL Serverのビューから重複したレコードを削除します

は、私が使用したクエリです:

CREATE VIEW myview 
AS 
    SELECT DISTINCT * 
    FROM [roug].[dbo].[Table_1] 
    ORDER BY id 

を表について:

id| name age 
---------- 
c1 ann 12 
u2 joe 15 
c1 ann 12 
c1 ann 12 
u5 dev 13 
u3 Jim 16 
u3 Jim 16 
+0

テーブルから物理的な重複を削除しようとしていますか?ビュー内で重複することなくレコードを表示するだけで、レコードをテーブルに保持したい場合は、 –

+0

は、ビューに重複のないレコードを表示する必要があります。テーブル内のレコードを一定に保つ@JayasuryaSatheesh –

答えて

2

あなたはデータを削除したい場合は、あなたをbなければならない。この

create view myview as 
WITH CTE 
AS 
(
    SELECT 
    RN = ROW_NUMBER() OVER(PARTITION BY [Id],[Name],[Age] ORDER BY ID), 
    * 
FROM [roug].[dbo].[Table_1] 
) 
SELECT 
    [Id],[Name],[Age] 
    FROM CTE 
     WHERE RN = 1 
+0

TOP、OFFSETまたはFOR XMLも指定されていない限り、ビュー、インライン関数、派生テーブル、サブクエリ、および共通テーブル式では、ORDER BY句は無効です。 これは@Jayasurya Satheeshを取得するエラーメッセージです。 –

+0

@AnuAntonyご注文無しでお試しください。回答は –

1

など)(DISTINCTまたはROW_NUMBERを使用しますかeビューではなくソーステーブル内で実行します。重複排除のための標準的なアプローチはcte経由です。お試しください

; 
    WITH cte 
      AS (SELECT id 
       ,   name 
       ,   age 
       ,   ROW_NUMBER() OVER (PARTITION BY id, name, age ORDER BY id) RN 
       FROM  Table_1 
      ) 
    DELETE FROM cte 
    WHERE RN > 1 

実際のデータを削除するか、ビューに表示しないかによって異なります。

+0

です。問題はビューから重複をスキップしてテーブルから削除しないようにしています。 –

+0

問題ありません。問題を熟読することは時々困難なことがあります。 DISTINCTがなぜあなたのために働いていないのか、私の答えとJayasuryaの両方が同じテクニックを使用しています。あなたの現実世界の使用に関連する他のフィールドはありますか?または隠された文字など?単純な区別は選択のためだけにうまくいくはずです。 –

関連する問題