结果重复
时间: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修剪重复项。