SQL选择If Then

时间:2012-12-14 17:03:08

标签: sql select if-statement

该表包含同一个人的大量行,并且所有列都包含相同的数据。对于实例:

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

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

3 个答案:

答案 0 :(得分: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表达式。

答案 1 :(得分:1)

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

SELECT DISTINCT FullName, Gender, DOB
FROM yourtable

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

请参阅SQL Fiddle with Demo

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

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

答案 2 :(得分:0)

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

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

拥有重复行通常是出错的迹象(可能是数据被多次加载)。您可能需要调查以查看实际原因。