合并2个SQL SELECT语句

时间:2012-10-16 15:22:43

标签: sql sql-server sql-server-2008 tsql select

**显然有些人认为我的问题不配他们的时间。我全心全意地为此道歉。然而,为什么不利用这段时间做一些积极的事情,至少告诉我你需要什么信息才能使这不是你眼中的问题。 **

我有表tblMembers中的员工列表和表tblClients中的客户列表。

一个人可能有几个客户。

与客户关联的工作人员由staffId根据客户记录标识。

每个工作人员都有一个类别ID,表示他们拥有的客户类型catId

我需要查找给定客户类型的所有员工,然后按他们拥有的客户数量对其进行排序。没有任何客户的工作人员应该显示0而不是显示结果。

简化的表格结构如下:

tblMembers

Id | catId

tblClients

Id | staffId 

非常感谢任何帮助。

谢谢!

4 个答案:

答案 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的计数

DEMO

答案 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