Scenarie:
Du arbejder som SQL Server-udvikler, du bliver bedt om at skrive en forespørgsel, der skal returnere Total SaleAmount fra dbo.Customer-tabel efter CountryShortName. Du bliver også bedt om at filtrere de poster, hvor Total SaleAmount efter CountryShortName er større end 10.Løsning:
Fra ovenstående scenarie har du bemærket et par ting. Først skal vi summere SaleAmount. For det andet skal vi gruppere efter SaleAmount efter CountryShortName. Det sidste, vi skal filtrere disse poster efter at have beregnet summen og returnerer kun, hvor det samlede SaleAmount er større end 10. Vi kan ikke bruge Where-klausulen her, da hvor vil filtrere posterne før Group by. SQL Server giver os Having-klausul, som vi kan bruge til at filtrere posterne efter gruppe efter.Lad os oprette dbo.Customer-tabel med nedenstående poster og derefter skrive vores forespørgsel ved at bruge Group by og Have-klausul.
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)Lad os skrive vores forespørgsel ved at bruge Group by og derefter bruge Have to filtrere posten, hvor Sum(SaleAmount) er større end 10.
SELECT countryshortname, Sum(saleamount) SaleAmountByCountry FROM dbo.customer GROUP BY countryshortname HAVING Sum(saleamount) > 10Sådan filtreres aggregerede data ved at bruge Having-sætning i SQL
Videodemo :Sådan bruger du at have klausul i SQL Select Statement