Scenario:
Stai lavorando come sviluppatore di SQL Server, ti viene chiesto di scrivere una query che dovrebbe restituire Total SaleAmount dalla tabella dbo.Customer per CountryShortName. Ti viene anche chiesto di filtrare i record in cui Total SaleAmount per CountryShortName è maggiore di 10.Soluzione:
Dallo scenario sopra, hai notato un paio di cose. Per prima cosa dobbiamo sommare SaleAmount. In secondo luogo, dobbiamo raggruppare per SaleAmount per CountryShortName. L'ultima cosa di cui abbiamo bisogno per filtrare quei record dopo aver calcolato la somma e restituisce solo dove SaleAmount totale è maggiore di 10. Non possiamo usare la clausola Where qui come where filtrerà i record prima di Raggruppa per. SQL Server ci fornisce una clausola Have che possiamo utilizzare per filtrare i record dopo il raggruppamento per.Creiamo dbo.Customer Table con i record seguenti e quindi scriviamo la nostra query utilizzando Group by e la clausola Have.
Create table dbo.Customer (Id int, FName VARCHAR(50), LName VARCHAR(50), CountryShortName CHAR(2), SaleAmount Int) GO --Insert Rows in dbo.Customer Table insert into dbo.Customer Values ( 1,'Raza','M','PK',10), (2,'Rita','John','US',12), (3,'Sukhi','Singh',Null,25), (4,'James','Smith','CA',60), (5,'Robert','Ladson','US',54), (6,'Alice','John','US',87), (6,'John',Null,'US',Null)Scriviamo la nostra query utilizzando Raggruppa per e quindi utilizzare Dovendo filtrare il record in cui Sum(SaleAmount) è maggiore di 10.
SELECT countryshortname, Sum(saleamount) SaleAmountByCountry FROM dbo.customer GROUP BY countryshortname HAVING Sum(saleamount) > 10Come filtrare i dati aggregati utilizzando la clausola Have in SQL
Demo video:come utilizzare la clausola Have nell'istruzione SQL Select