2012-05-24 24 views
9

私はビューを持っています。どのようにしてそれからの別個のレコードだけを表示できますか? 19の列があります。私はすべてを重複なしで単一で表示したいので、重複を削除したくありません。私は視聴目的のためだけにそれを必要とします。ビューから重複レコードを削除します

前のクエリを使用すると、1000レコードが返されます。しかし、次のクエリを使用すると、重複することなく正確なレコードが返されます。しかし、私はすべての列を表示したい。

 SELECT DISTINCT([Complaint Number]) 
     FROM [CCCMPREPOSITORY].[dbo].[VW_Final_] 

答えて

12

をあなたはとてもDISTINCTが動作しません使用して、いくつか/すべての苦情番号の重複レコードを持っている必要があります。あなたが列1 = Aのために一つだけの記録をしたい場合は、単純なテーブルなど

Column1 | Column2 
-----------+------------ 
A   | X 
A   | Y 

を考えてみましょう、SQLは列2にXまたはYを配置するかどうかを知る方法がありません。これは、あなたが持っているのと同じ問題ですが、2ではなく19の列があります。各クレーム番号にどの行を表示するかを決定する方法について、ある種のロジックを実装する必要があります。私はXが列2に見せたかったのであれば、上記の表のために私は次のクエリを使用します。

SELECT Column1, 
     Column2 
FROM ( SELECT Column1, 
        Column2, 
        ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY Column2 ASC) [RowNumber] 
      FROM MyTable 
     ) t 
WHERE RowNumber = 1 

ここで私が唯一の最も優先順位の高いものを表示し、その後、各行に優先順位をつけるROW_NUMBER()機能を使用しています。彼らがどのような順序で出てくるか気にしなければ、このようなものを使ってランダムな行を選ぶかもしれません。

ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber] 

私は私はあなたが必要な正確に何を投稿することはできませんどのようなロジッククエリに適用するかわからないが、私は試してみて、あなたが始めることができるので:

SELECT [Complaint Number], 
     [Complaint_For], 
     [Total_Complaint_Qty], 
     [Defects], 
     [Customer Code ], 
     [Location], 
     [CutomerName], 
     [KUNUM], 
     [QMNUM], 
     [Responsible_KAM] 
FROM ( SELECT [Complaint Number], 
        [Complaint_For], 
        [Total_Complaint_Qty], 
        [Defects], 
        [Customer Code ], 
        [Location], 
        [CutomerName], 
        [KUNUM], 
        [QMNUM], 
        [Responsible_KAM], 
        ROW_NUMBER() OVER(PARTITION BY [Complaint Number] ORDER BY Complaint_For, Defects) AS RowNumber 
      FROM [CCCMPREPOSITORY].[dbo].[VW_Final_] 
     ) data 
WHERE RowNumber = 1 

あなただけいじる必要があるだろうあなたのニーズに合わせてROW_NUMBER内のORDER BYの機能を使用してください。

+1

脇に、あなたの列とテーブル/ビューの名前を変更することを検討してください。オブジェクト名のスペースは嫌です。 – GarethD

+1

ありがとうございます.. 100%働いています.. –

+0

GarethD the Genius ... –

0

distinctため()を使用しないでください。ただ、使用:

select distinct col1, col2 .. from your_table 
+0

同じ結果が得られます。 –

+0

上記のクエリは、テーブルからすべての異なる値を生成する必要があります。いくつかのデータを投稿すると、助けがさらに容易になります – Diego

1

試してみてください。

SELECT [Complaint Number], MAX([Complaint_For]), MAX([Total_Complaint_Qty]), ... 
FROM [CCCMPREPOSITORY].[dbo].[VW_Final_] 
GROUP BY Complaint Number 
関連する問題