2017-11-05 121 views
5

Mam pytanie, który używa tego oświadczenia DMLCo mogę użyć poza Grupą?

SELECT SupplierID, COUNT(*) AS TotalProducts 
FROM Products 
GROUP BY SupplierID; 

staram się uzyskać takie same wyniki bez użycia „Group by”. Mogę użyć zmiennej tabeli lub tabeli tymczasowej, z Wstaw i Aktualizuj w razie potrzeby. Ponadto dozwolone jest używanie while i IF-else.

Naprawdę zgubiłem każdą pomoc byłaby niesamowita. Dzięki, SO Community.

Jest używany w SQL Server. Dzięki jeszcze raz.

+2

Dlaczego starasz się unikać GROUP BY? –

Odpowiedz

6

zawsze można skorzystać z funkcji okna SELECT DISTINCT:

SELECT DISTINCT SupplierID, 
     COUNT(*) OVER (PARTITION BY SupplierId) AS TotalProducts 
FROM Products; 

Ale GROUP BY jest właściwym sposobem napisać kwerendę agregacji.

3

Można również stosować następujące zapytanie:

select distinct P.SupplierID, (select count(*) from Products 
where SupplierID=P.SupplierID) TotalProducts from Products P 

Dostaniesz ten sam rezultat przy użyciu powyższej kwerendy, ale nie sądzę, unikając GROUP BY to dobry pomysł!

2

Korzystanie podkwerenda:

SELECT DISTINCT SupplierID 
     ,(SELECT COUNT(*) 
      FROM Products P2 
     WHERE P2.SupplierID = P.SupplierID 
     ) AS TotalProducts 
    FROM Products P 

Wyraźny jest usunięcie duplikatów ... Ilość wykonuje dla każdego wiersza tak bez odrębny byś się powtórzyć odpowiedź na supplierID.

1

Innym sposobem

select distinct supplierId, p2.ttl 
from products p1 
cross apply 
(
    select count(*) 
    from products p2 
    where p1.supplierId = p2.supplierId 
) p2(ttl);