Scenario:
Du arbetar som SQL Server-utvecklare, du ombeds att skriva en fråga som ska returnera Total SaleAmount från dbo.Customer-tabellen efter CountryShortName. Du ombeds också att filtrera de poster där Total SaleAmount efter CountryShortName är större än 10.Lösning:
Från ovanstående scenario har du märkt ett par saker. Först måste vi summera SaleAmount. För det andra måste vi gruppera efter SaleAmount efter CountryShortName. Det sista vi behöver för att filtrera dessa poster efter att ha beräknat summan och returnerar endast där det totala SaleAmount är större än 10. Vi kan inte använda Where-satsen här eftersom var kommer att filtrera posterna före Group by. SQL Server ger oss Having-sats som vi kan använda för att filtrera posterna efter grupp efter.Låt oss skapa dbo.Customer Table med nedanstående poster och sedan skriva vår fråga genom att använda Group by och Have-sats.
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)Låt oss skriva vår fråga genom att använda Group by och sedan använda Att filtrera posten där Sum(SaleAmount) är större än 10.
SELECT countryshortname, Sum(saleamount) SaleAmountByCountry FROM dbo.customer GROUP BY countryshortname HAVING Sum(saleamount) > 10Så här filtrerar du aggregerad data med hjälp av Having-satsen i SQL
Videodemo :Hur man använder att ha klausul i SQL Select Statement