Nie jestem pewien, dlaczego przyjął odpowiedź została przyjęta i na pewno nie rozumieją, dlaczego został on przegłosowany, ale OP zawiera następujące pytanie:
Napisałem to, ale nie jest to, czego chcę.
select DISTINCT carBrand, carYear, carModel from Cars;
Przyjęte rozwiązanie jest zalecane, aby użyć:
SELECT carBrand , carYear ,carModel
FROM Cars
GROUP BY carBrand , carYear ,carModel;
która zwraca dokładnie taki sam wynik jak zapytania OP. W rzeczywistości sugestia zawarta w odpowiedzi (grupa użycia) nie jest nawet zachęcana do uzyskiwania wyraźnych wyników, ale powinna być użyta do agregacji. Aby uzyskać więcej informacji, zobacz odpowiedź this.
Ponadto SQL Server jest na tyle sprytny, aby zrozumieć, że jeśli w zapytaniu nie ma funkcji agregacji, zapytanie prosi się o distinct
, więc pod maską będzie używane distinct
.
Distinct będzie wyróżniał się na całym wierszu, jak zaznaczył @MarkByers w swojej odpowiedzi.
Dla tych, którzy chcą przetestować powyższe, oto skrypt, który utworzy tabelę z 3 kolumnami, a następnie wypełni ją danymi. Zarówno (distinct
i group by
) zwrócą ten sam zestaw wyników.
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');
Oba zapytania powróci ten wynik:
carBrand carYear carModel
BMW 2000 328 i
BMW 2000 3M
Wnioski
NIE używaj group by
jeśli chcesz odrębne rejestry. Użyj distinct
. Użyj funkcji group by
podczas korzystania z funkcji agregacji, takiej jak SUM
, COUNT
itd.
nazwa samochodu znajduje się w jakiej dziedzinie? – Randy
W moim SqlSerwerze "wybierz DISTINCT carBrand, carYear, carModel from Cars;" działa idealnie – Gamby