SQL AdventureWorks 按城市按性别统计员工数量

标签 sql sql-server tsql pivot adventureworks

我想按性别统计城市,如下所示;

City    GenderFCount  GenderMCount
Redmond 10             20   

这是我的查询,在 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

如果可能的话,您能否以多种方式展示解决方案,例如“PIVOT”、通过sql函数(UDF)、存储过程或其他方式。

谢谢

最佳答案

这是 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

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

现在你可以这样调用它

 SELECT * FROM dbo.fnPivot()

关于SQL AdventureWorks 按城市按性别统计员工数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3541016/

相关文章:

c# - 在 SQL WHERE 子句中使用 C# 日期时间

sql - 连接到与网站 : localhost or ip adress? 相同的服务器上的 SQL Server 数据库

sql-server - 将 DDL 从 Oracle 迁移到 SQL Server

SQL Server AS 语句 WHERE 语句中的别名列

基于 ID 列表的 SQL 循环插入

mysql - 如何正确设计 SQL 查询以实现最佳行输出

sql - Oracle中如何将时间戳转换为日期列?

sql-server - 使用 WITH (NOLOCK) 和事务

sql - 使用直接查询和存储过程将对同一个表的插入请求相乘会导致冲突吗?

sql - 你如何在 tsql contains 函数中搜索 & (符号)?