我正在SQL server2005中编写一个查询。这会在结果中返回一个重复的行。我可以用特定列作为密钥来消除这种重复吗?
答案 0 :(得分:9)
您可以使用DISTINCT关键字消除完整的重复行。如果某个键列是重复的,但其余列不是,则必须使用聚合函数和GROUP BY子句向SQL Server说明您想要返回的数据。
答案 1 :(得分:6)
SELECT DISTINCT将消除重复的行。
答案 2 :(得分:3)
可以使用SELECT DISTINCT
来消除重复项,正如其他评论中所建议的那样,它现在可能运行得很好,但您可能会乞求将来遇到麻烦。如果你不能在没有SELECT DISTINCT
的情况下得到一个独特的结果,那么你的数据库模型已经被非规范化了太多,你的查询会因为检索然后消除大量的重复而陷入困境。 (但是,当然,规范化现有数据库模式很少是微不足道的......)
如果没有关于架构和查询的更多信息,则无法确定SELECT DISTINCT
是否是可接受的解决方法,或者是否只有更好的连接语句。
答案 3 :(得分:0)
您的结果可能包含关联数组和数字数组。
答案 4 :(得分:0)
如果您只想要一列:
SELECT DISTINCT MyColumn FROM MyTable;
如果您想要各种列,可能返回最大值或总和,请尝试对其进行分组:
SELECT MyFirstColumn, MySecondColumn, MAX(SomeDate) AS MaxDate, SUM(Amount) AS TotalAmount
FROM MyTable
GROUP BY MyFirstColumn, MySecondColumn;
答案 5 :(得分:0)
正如您在评论中指出的那样,您正在使用存储过程。处理此情况的一种方法是创建一个使用存储过程填充的临时表。然后从临时表中选择结果,并使用SELECT DISTINCT或GROUP BY修剪重复项。