Aquí está usando un CTE, incrustado en un procedimiento. Ahora, estoy usando AdventureWorks 2012, porque eso es todo lo que tengo. Pero el concepto es el mismo
USE [AdventureWorks]
GO
/****** Object: StoredProcedure [dbo].[GenderCountbyCity] Script Date: 4/20/2016 9:07:04 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GenderCountbyCity]
AS
BEGIN
;WITH EmpF
AS (
SELECT pa.City, hre.Gender, COUNT(hre.Gender) AS CountF
FROM Person.BusinessEntityAddress pbea
JOIN Person.Address pa
ON pbea.AddressID = pa.AddressID
JOIN HumanResources.Employee hre
ON pbea.BusinessEntityID = hre.BusinessEntityID
WHERE hre.Gender = 'F'
GROUP BY pa.City, hre.Gender
),
EmpM
AS (
SELECT pa.City, hre.Gender, COUNT(hre.Gender) AS CountM
FROM Person.BusinessEntityAddress pbea
JOIN Person.Address pa
ON pbea.AddressID = pa.AddressID
JOIN HumanResources.Employee hre
ON pbea.BusinessEntityID = hre.BusinessEntityID
WHERE hre.Gender = 'M'
GROUP BY pa.City, hre.Gender
)
SELECT COALESCE(EmpF.City,EmpM.City) AS City, COALESCE(EmpF.CountF,0) AS GenderFCount, COALESCE(EmpM.CountM,0) AS GenderMCount
FROM EmpF
FULL JOIN EmpM
ON EmpF.City = EmpM.City
ORDER BY COALESCE(EmpF.City,EmpM.City)
END
Si desea crear, en lugar de alterar, un procedimiento, basta con cambiar "ALTER" para "crear". A continuación, actualice su lista de procedimientos almacenados y puede modificarla desde allí. Después de eso, el "CREAR" mostrará automáticamente "ALTERAR" y cualquier cambio se guardará cuando presione F5, si es exitoso. Luego puede escribir EXEC dbo.GenderCountbyCity (o cualquiera que sea su nombre) [o simplemente haga clic con el botón derecho en el procedimiento y elija Ejecutar procedimiento almacenado] y obtendrá los resultados.
lo siento, quiero contar el sexo por ciudades – qods
Una sugerencia: si usa alias que son abreviaturas de sus tablas, podría ser más fácil de leer, por ejemplo, hre para HumanResources.Employee. Estoy seguro de que hay muchas personas que lo hacen de diferentes maneras. Pero para mí, ayuda a mantener el nivel de confusión bajo. Además, el uso de esos alias en la declaración de selección, incluso cuando técnicamente no son necesarios, puede recordarle de qué tabla lo sacó. – DaveX