好的,我有一个包含一些垃圾数据且没有唯一标识符列的表。让我举一个我正在使用的表的例子:
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 行为例。它们显然都指的是同一个人,但它们只是部分重复。在这两个中,我希望我的 SELECT 语句中包含第 1 行,因为它在每列中包含最多的数据。第 3 行和第 4 行也是如此。第 3 行是我想要包含的行。对于第 5 行和第 6 行,选择哪一个并不重要,因为它们都是完全重复的。第 7 行将默认包括在内,因为它是不同的(意味着 A、B 和 C,而不仅仅是 A 和 B)。
这是我尝试过的:
SELECT A, B, C = MAX(D), MAX(E),
FROM dbo.Data
GROUP BY A, B, C;
这似乎抓住了我想要的唯一行,但数据以某种方式放置到错误的列中。