SQL Select If Then



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

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

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

正如其他人所说,由于所有行都是相同的,因此可以使用不同的关键字:

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表达式来实现。

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

SELECT DISTINCT FullName, Gender, DOB
FROM yourtable

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

请参阅带有演示的SQL Fiddle

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

SELECT FullName, Gender, DOB
FROM yourtable
GROUP BY FullName, Gender, DOB

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

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

有重复的行通常是错误的迹象(可能是数据被多次加载)。你可能需要调查一下,看看真正的原因。

最新更新