结果重复

时间:2020-03-06 14:35:15  来源:igfitidea点击:

我在SQL Server2005中编写查询。这使我返回结果中的重复行。我可以使用特定的列作为键来消除此重复吗?

解决方案

我们可以使用DISTINCT关键字消除完全重复的行。如果有一些重复的键列,但其余的列不重复,则必须使用聚合函数和GROUP BY子句向SQL Server解释我们要返回的数据。

结果可能同时包含一个关联数组和一个数字数组。

SELECT DISTINCT将消除重复的行。

如果只需要一列:

SELECT DISTINCT MyColumn FROM MyTable;

如果我们想要各种列,可能返回最大值或者总和,请尝试将其分组:

SELECT MyFirstColumn, MySecondColumn, MAX(SomeDate) AS MaxDate, SUM(Amount) AS TotalAmount 
FROM MyTable 
GROUP BY MyFirstColumn, MySecondColumn;

我们可以使用SELECT DISTINCT来消除重复,正如其他评论所建议的那样,它可能目前效果很好,但是我们可能会为将来的麻烦而乞求。过于频繁地,如果没有SELECT DISTINCT就无法获得唯一的结果,则数据库模型已被过度规范化,并且查询可能因检索然后消除大量重复项而陷入困境。 (但是,当然,对现有数据库模式进行规范化很少会变得很琐碎……)

如果没有关于模式和查询的更多信息,就无法判断出" SELECT DISTINCT"是否是可以接受的解决方法,或者仅仅是有更好的join语句。

正如我们在注释中指出的那样,我们正在使用存储过程。处理这种情况的一种方法是创建一个临时表,使用存储过程填充该表。然后从临时表中选择结果,并使用SELECT DISTINCT或者GROUP BY修剪重复项。