right join会过滤nullSELECT ContractMemberCode,应收户数=isnull((select count(*) from t_ChargeItem where datepart(yyyy,t_ChargeItem.ChargeBeginDate)=2003 and t_ChargeItem.ContractMemberCode=t_ContractMember.ContractMemberCode),0) FROM t_ContractMember
改一下:SELECT t_ContractMember.ContractMemberCode,应收户数=sum(case when t_ChargeItem.ChargeItemCode null then 0 else t_ChargeItem.ChargeItemCode end) FROM t_ChargeItem right join t_ContractMember on t_ChargeItem.ContractMemberCode=t_ContractMember.ContractMemberCode where datepart(yyyy,t_ChargeItem.ChargeBeginDate)=2003 GROUP BY t_ContractMember.ContractMemberCode
and t_ChargeItem.ContractMemberCode=t_ContractMember.ContractMemberCode),0)
FROM t_ContractMember
FROM t_ChargeItem right join t_ContractMember
on t_ChargeItem.ContractMemberCode=t_ContractMember.ContractMemberCode
where datepart(yyyy,t_ChargeItem.ChargeBeginDate)=2003
GROUP BY t_ContractMember.ContractMemberCode