Cenário:
Você está trabalhando como desenvolvedor do SQL Server, você é solicitado a escrever uma consulta que deve retornar Total SaleAmount da tabela dbo.Customer por CountryShortName. Também é solicitado que você filtre os registros em que Total SaleAmount por CountryShortName for maior que 10.Solução:
Do cenário acima, você notou algumas coisas. Primeiro, precisamos somar o SaleAmount. Em segundo lugar, precisamos agrupar pelo SaleAmount por CountryShortName. A última coisa que precisamos é filtrar esses registros depois de calcular a soma e só retorna onde total SaleAmount for maior que 10. Não podemos usar a cláusula Where aqui pois onde vai filtrar os registros antes de Group by. O SQL Server nos fornece a cláusula Tendo que podemos usar para filtrar os registros após agrupar por.Vamos criar a tabela dbo.Customer com os registros abaixo e, em seguida, escrever nossa consulta usando a cláusula Group by e Tendo.
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)Vamos escrever nossa consulta usando Group by e, em seguida, usar Tendo para filtrar o registro em que Sum(SaleAmount) é maior que 10.
SELECT countryshortname, Sum(saleamount) SaleAmountByCountry FROM dbo.customer GROUP BY countryshortname HAVING Sum(saleamount) > 10Como filtrar dados agregados usando a cláusula Tendo no SQL
Demonstração em vídeo:como usar a cláusula Havendo na instrução SQL Select