我不确定为什么接受的答案已被接受,当然也不明白为什么它被投票,但 OP 在问题中有以下内容:
我写了这个,但这不是我想要的。
select DISTINCT carBrand, carYear, carModel from Cars;
接受的答案建议使用:
SELECT carBrand , carYear ,carModel
FROM Cars
GROUP BY carBrand , carYear ,carModel;
返回与 OP 查询完全相同的结果。实际上,甚至不鼓励将答案中的建议(使用 group by)用于获得不同的结果,而应将其用于聚合。有关更多信息,请参阅this 答案。
此外,SQL Server 足够聪明,可以理解如果查询中没有聚合函数,那么查询实际上是在请求distinct,因此它会在后台使用distinct。
正如@MarkByers 在他的回答中指出的那样,Distinct 将对整行执行不同的操作。
对于那些想要测试上述内容的人,这里有一个脚本,它将创建一个包含 3 列的表,然后用数据填充它。两者(distinct 和 group by)都将返回相同的结果集。
CREATE TABLE [dbo].[Cars](
[carBrand] [varchar](50) NULL,
[carYear] [int] NULL,
[carModel] [varchar](50) NULL
)
go;
insert into Cars values('BMW', 2000, '328 i');
insert into Cars values('BMW', 2000, '328 i');
insert into Cars values('BMW', 2000, '328 i');
insert into Cars values('BMW', 2000, '3M');
两个查询都会返回这个结果:
carBrand carYear carModel
BMW 2000 328 i
BMW 2000 3M
结论
如果您想要不同的记录,请勿使用group by。使用distinct。使用SUM、COUNT等聚合函数时使用group by。