0

该表包含同一个人的许多行,所有列都包含相同的数据。例如:

FullName       Gender     DOB
---------------------------------
Mary Jones     Female     2012-05-01

我想为每个人选择一行以显示在报告中。我认为最简单的方法可能是我们使用 if 语句来检查下一行是否与第一行相同。

4

3 回答 3

2

正如其他人所说,由于所有行都相同,您可以使用 distinct 关键字:

SELECT DISTINCT <columns>
FROM table

但是,您可能会发现这些重复记录的原因是表中的某处至少有一列不同。在这种情况下,您可能需要改用 GROUP BY:

SELECT <columns>
FROM table
GROUP BY <columns>

如果您需要显示不属于分组列的数据,您只需列出在 GROUP BY 子句中匹配的列,然后您必须使用聚合函数或子查询将唯一列中的数据带入选择列表. GROUP BY 查询可能会变得非常复杂并让您头疼。

如果这些列确实始终如一,那么您的架构或应用程序设计中的某些内容是不正确的。您很少会在表中拥有真正重复的记录,这更有可能意味着出现了问题。

最后,我需要评论一下您的 IF/THEN 请求。这个想法太离谱了。SQL 具有基于SET声明性的编程风格。使用 IF/THEN 之类的程序工具思考问题只会带来麻烦。即使您确实需要条件表达式,在 SQL 语句中执行此操作的方法也是通过CASE表达式。

于 2012-12-14T17:14:57.277 回答
1

如果所有列中的数据都相同,则可以使用DISTINCT关键字:

SELECT DISTINCT FullName, Gender, DOB
FROM yourtable

这将检查所有字段中的数据是否是唯一的,删除任何重复项。

请参阅带有演示的 SQL Fiddle

另一种写法是GROUP BY在所有字段上使用 a :

SELECT FullName, Gender, DOB
FROM yourtable
GROUP BY FullName, Gender, DOB
于 2012-12-14T17:06:40.367 回答
0

您应该改用 distinct 子句。如果所有列实际上完全相同。

select distinct FullName, Gender, DOB
  from <your_table_name>;

有重复的行通常是出现问题的迹象(可能是数据被多次加载)。您可能需要进行调查才能了解实际原因。

于 2012-12-14T17:06:48.993 回答