Escenario:
Está trabajando como desarrollador de SQL Server, se le pide que escriba una consulta que debería devolver Total SaleAmount de la tabla dbo.Customer por CountryShortName. También se le pide que filtre los registros en los que Total SaleAmount por CountryShortName sea mayor que 10.Solución:
Desde el escenario anterior, ha notado un par de cosas. Primero necesitamos sumar el SaleAmount. En segundo lugar, debemos agrupar por SaleAmount por CountryShortName. Lo último que necesitamos para filtrar esos registros después de calcular la suma y solo devuelve donde el monto total de la venta es mayor que 10. No podemos usar la cláusula Where aquí, ya que filtrará los registros antes de Agrupar por. SQL Server nos proporciona la cláusula Tener que podemos usar para filtrar los registros después de agrupar por.Vamos a crear la tabla dbo.Customer con los siguientes registros y luego escribir nuestra consulta usando la cláusula Agrupar por y Tener.
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)Escribamos nuestra consulta usando Agrupar por y luego use Tener para filtrar el registro donde Sum(VentaAmount) es mayor que 10.
SELECT countryshortname, Sum(saleamount) SaleAmountByCountry FROM dbo.customer GROUP BY countryshortname HAVING Sum(saleamount) > 10

Video de demostración:cómo usar la cláusula Have en la instrucción SQL Select