sql语句,统计录入表中各个部门不重复的姓名人数

来源:百度知道 编辑:UC知道 时间:2024/06/16 21:03:38
我自己写的SQL如下:
select tb_Clerk.DepartmentID as 机构号,
sum(case when tb_InputInfo.PaymentMethods='Y' then count(distinct tb_InputInfo.PID) else 0 end) as 人数
from tb_Clerk,tb_InputInfo
where tb_InputInfo.PID=tb_Clerk.PID
group by tb_Clerk.DepartmentID

提示错误:不能对包含聚合或子查询的表达式执行聚合函数

请高手帮我修改下代码,谢谢!
mailking2001 回答的我开始就是这样写的,不过有重复的人,注意tb_InputInfo.PID不是主键,有重复的字段! (不能放在where后边,因为还有其他的查询,太多了,我没写,其他查询都是用sum(case when ..then..else..end),如果在where后加了其他查询数据就不全了!)
皇家救星1985 关键不是查询tb_InputInfo所有的姓名,有条件的,必须符合tb_InputInfo.PaymentMethods='Y' 才可以,但是不能放在where后边,有点难度啊!

建议你这样做,用嵌套子查询的方法,子查询中只查询需要的数据而不进行统计求和.
Select
DepartmentID as 机构号
,Sum(case when 人数 = 0 then 0 else 1)
,Sum(...)
,...
From
(
select tb_Clerk.DepartmentID,
(case when tb_InputInfo.PaymentMethods='Y' then distinct tb_InputInfo.PID else 0 end) as 人数
,(case when ... then ...)
,...
from tb_Clerk,tb_InputInfo
where tb_InputInfo.PID=tb_Clerk.PID
group by tb_Clerk.DepartmentID
) Table
Group By 机构号

把你的表结构贴出来吧,顺便说明怎么判断重复姓名(限制条件也要,例如PaymentMethods='Y')

select tb_Clerk.DepartmentID as 机构号,
sum(case when tb_InputInfo.PaymentMethods='Y' then 1 else 0 end) as 人数
from tb_Clerk,tb_InputInfo
where tb_InputInfo.PID=tb_Clerk.PID
group by tb_Clerk.DepartmentID

你count(distinct tb_InputInfo.PID)除了1还会有其他情况吗?

select tb_Clerk.DepartmentID as 机构号,
count(distinct case when tb_InputInfo.PaymentMethods='Y' then tb_InputInf