**显然有些人认为我的问题不配他们的时间。我全心全意地为此道歉。然而,为什么不利用这段时间做一些积极的事情,至少告诉我你需要什么信息才能使这不是你眼中的问题。 **
我有表tblMembers
中的员工列表和表tblClients
中的客户列表。
一个人可能有几个客户。
与客户关联的工作人员由staffId
根据客户记录标识。
每个工作人员都有一个类别ID,表示他们拥有的客户类型catId
。
我需要查找给定客户类型的所有员工,然后按他们拥有的客户数量对其进行排序。没有任何客户的工作人员应该显示0而不是显示结果。
简化的表格结构如下:
tblMembers
:
Id | catId
tblClients
:
Id | staffId
非常感谢任何帮助。
谢谢!
答案 0 :(得分:2)
试试这个:
SELECT m.Id 'Member Id', ISNULL(c.StaffCount, 0) 'StuffCount'
FROM tblMembers m
LEFT JOIN
(
SELECT staffId, COUNT(staffId) 'StaffCount'
FROM tblClients
GROUP BY staffId
) c ON m.Id = c.staffId
WHERE m.Cat = 'Some Id'
ORDER BY StuffCount
答案 1 :(得分:2)
进行连接/分组并计算
非常简单SELECT
s.id,
s.catid,
COUNT(c.id)
FROM
tblMembers s
LEFT JOIN tblClients c
ON s.id = c.staffid
WHERE
s.catid = @catID
GROUP BY
s.id,
s.catid
ORDER BY
COUNT(c.id) desc
然而,一个棘手的问题是
显示0的结果而不是显示。
要执行此操作,您需要执行左连接以确保它们即使没有匹配的记录也会显示,并且您需要确保计算连接右侧表格上的字段。否则你会得到1的计数
答案 2 :(得分:1)
希望我能正确理解你的情况 尝试这样的事情:
SELECT T1.ID,
Count(*)
FROM MEMBERS T1
INNER JOIN CLIENTS T2
ON T1.ID = T2.STAFFID
WHERE T1.CATID = 2
GROUP BY T1.ID
UNION
SELECT DISTINCT ID,
0
FROM MEMBERS
WHERE CATID != 2
可以使用工作样本here。
答案 3 :(得分:1)
尝试:
select tblMembers.id, count(tblClient.id)
from tblMembers left join tblCLient on staffId = tblMembers.id
where tblMembers.catId = ??
group by tblMembers.id
order by 2 desc