さて、いくつかのジャンク データを含むテーブルがあり、一意の識別子の列はありません。私が扱っているテーブルの例を挙げましょう:
A | B | C | D | E |
--------------------------------------------------
1. Fiona | Smith | NULL | 2152 Cherry Lane | CA |
2. Fiona | Smith | NULL | NULL | NULL |
3. Bill | NULL | ACME | 2903 Center Road | WA |
4. Bill | NULL | ACME | NULL | NULL |
5. NULL | NULL | ABC | 2300 Water St | PA |
6. NULL | NULL | ABC | 2300 Water St | PA |
7. NULL | NULL | NULL | 3455 B Street | CO |
個別の行のみを取得する SELECT ステートメントを作成する必要があります。たとえば、行 1 と 2 を見てみましょう。どちらも明らかに同じ人物を指していますが、部分的にしか重複していません。これら 2 つのうち、各列に最も多くのデータが含まれている行 1 を SELECT ステートメントに含める必要があります。行 3 と 4 についても同様です。行 3 は、含めたい行です。行 5 と 6 については、両方とも完全に重複しているため、どちらを選択しても問題ありません。行 7 は別個であるため、デフォルトで含まれます (A と B だけでなく、A、B、C を意味します)。
これが私が試したことです:
SELECT A, B, C = MAX(D), MAX(E),
FROM dbo.Data
GROUP BY A, B, C;
これは私が望む一意の行を取得しているようですが、データは何らかの形で間違った列に配置されています。