You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何消除AdventureWorks库JobTitle列NULL值,实现单职位列统计男女数量

解决AdventureWorks中职位列无NULL且展示男女人数的问题

你的需求是得到一个无NULL值的职位列,同时在旁展示对应职位的男性、女性总人数。原代码的问题在于CASE语句仅处理了男性职位表为空的情况,当某个职位只有男性时,女性职位表的JobTitle为NULL,最终结果的JobTitle列仍会出现NULL值。

方案一:优化原临时表查询

通过COALESCE函数获取非NULL的职位名,同时用ISNULL将NULL的人数转为0,结果更直观:

USE AdventureWorks2019 
GO 

select count(hre.gender) AS NumberOfFemales, JobTitle
into #FemalesPerJobTitle
from HumanResources.employee as hre                     
group by JobTitle, Gender
having gender = 'F';


SELECT COUNT(HRE.Gender) AS NumberOfMales, JobTitle
INTO #MalesPerJobTitle
FROM HumanResources.Employee AS HRE
GROUP BY JobTitle, Gender
HAVING gender = 'M';

SELECT 
    ISNULL(FPJ.NumberOfFemales, 0) AS Females,
    ISNULL(MPJ.NumberOfMales, 0) AS Males,
    COALESCE(FPJ.JobTitle, MPJ.JobTitle) AS JobTitle
FROM #FemalesPerJobTitle AS FPJ
FULL OUTER JOIN #MalesPerJobTitle AS MPJ
ON FPJ.JobTitle = MPJ.JobTitle
  • COALESCE(FPJ.JobTitle, MPJ.JobTitle):返回两个参数中第一个非NULL的值,确保JobTitle始终有有效内容。
  • ISNULL(..., 0):将没有对应性别的人数显示为0,避免结果中出现NULL。

方案二:用条件聚合简化查询(推荐)

无需创建临时表,直接通过一次分组查询完成需求,效率更高:

USE AdventureWorks2019 
GO

SELECT
    JobTitle,
    COUNT(CASE WHEN Gender = 'F' THEN 1 END) AS Females,
    COUNT(CASE WHEN Gender = 'M' THEN 1 END) AS Males
FROM HumanResources.Employee
GROUP BY JobTitle
  • 按JobTitle分组后,用CASE筛选对应性别的记录并统计数量,自动处理单一性别的职位场景。
  • 原表中JobTitle无NULL值时,结果的JobTitle列自然不会出现NULL;若原表存在NULL职位,可添加WHERE JobTitle IS NOT NULL过滤。

内容的提问来源于stack exchange,提问作者sqlsister13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:55:29