70

多数の結合を持つ多数の大きなテーブル (行と列) に対するクエリがありますが、テーブルの 1 つにデータの行が重複しているため、クエリで問題が発生します。これは別の部門からの読み取り専用のリアルタイム フィードであるため、そのデータを修正することはできませんが、クエリの問題を回避しようとしています。

それを考えると、このがらくたデータを左結合として適切なクエリに追加する必要があります。データセットは次のようになります。

IDNo    FirstName   LastName    ...
-------------------------------------------
uqx     bob     smith
abc     john        willis
ABC     john        willis
aBc     john        willis
WTF     jeff        bridges
sss     bill        doe
ere     sally       abby
wtf     jeff        bridges
...

(約 20 列、100K 行)

私の最初の本能は、約 80K 行が得られた個別を実行することでした。

SELECT DISTINCT P.IDNo
FROM people P

しかし、次のことを試みると、すべての行が返されます。

SELECT DISTINCT P.*
FROM people P

また

SELECT 
    DISTINCT(P.IDNo) AS IDNoUnq 
    ,P.FirstName
    ,P.LastName
    ...etc.    
FROM people P

次に、すべての列で FIRST() 集計関数を実行すると考えましたが、それも間違っているように感じます。構文的に、ここで何か間違ったことをしていますか?

更新: 注意したい: これらのレコードは、上記の ID の非キー/非インデックス フィールドに基づく重複です。ID はテキスト フィールドで、値は同じですが、問題の原因となっている他のデータとはケースが異なります。

4

7 に答える 7

2

これを試して

 SELECT *
 FROM people P 
 where P.IDNo in (SELECT DISTINCT IDNo
              FROM people)
于 2013-11-07T12:00:15.553 に答える
2

重複行の性質によっては、これらの列で大文字と小文字を区別するだけでよいようです。これらの列に照合を設定すると、次のようになります。

SELECT DISTINCT p.IDNO COLLATE SQL_Latin1_General_CP1_CI_AS, p.FirstName COLLATE SQL_Latin1_General_CP1_CI_AS, p.LastName COLLATE SQL_Latin1_General_CP1_CI_AS
FROM people P

http://msdn.microsoft.com/en-us/library/ms184391.aspx

于 2014-11-03T04:40:59.217 に答える