SQL AdventureWorks按城市的性别统计员工

qod*_*ods 7 sql t-sql sql-server pivot adventureworks

我想按性别统计城市,就像这样;

City    GenderFCount  GenderMCount
Redmond 10             20   
Run Code Online (Sandbox Code Playgroud)

这是我的查询获取AdventureWorks数据库中的城市和性别

select Gender,City from HumanResources.Employee as t1
    inner join HumanResources.EmployeeAddress as t2
    on t1.EmployeeID = t2.EmployeeID
    inner join Person.Address as t3
    on t2.AddressID = t3.AddressID
Run Code Online (Sandbox Code Playgroud)

如果有可能,您可以通过多种方式显示解决方案,例如"PIVOT",sql函数(UDF),存储过程或其他方式.

谢谢

SQL*_*ace 6

这是PIVOT查询,您可以将其转储到存储过程或udf中

select City, F as GenderFCount, M as GenderMCount
 from(
select Gender,City
from HumanResources.Employee as t1
    inner join HumanResources.EmployeeAddress as t2
    on t1.EmployeeID = t2.EmployeeID
    inner join Person.Address as t3
    on t2.AddressID = t3.AddressID
    ) AS pivTemp
PIVOT
(   count(Gender)
    FOR Gender IN ([F],[M])
) AS pivTable
Run Code Online (Sandbox Code Playgroud)

UDF的示例

CREATE FUNCTION fnPivot()
RETURNS TABLE

AS
RETURN (
select City, F as GenderFCount, M as GenderMCount
 from(
select Gender,City
from HumanResources.Employee as t1
    inner join HumanResources.EmployeeAddress as t2
    on t1.EmployeeID = t2.EmployeeID
    inner join Person.Address as t3
    on t2.AddressID = t3.AddressID
    ) AS pivTemp
PIVOT
(   count(Gender)
    FOR Gender IN ([F],[M])
) AS pivTable
)
GO
Run Code Online (Sandbox Code Playgroud)

现在你可以这样称呼它

 SELECT * FROM dbo.fnPivot()
Run Code Online (Sandbox Code Playgroud)