需要您对GROUP BY
条款的帮助。
我有两个表:经理和客户(我简化了一个问题)。
Managers:
managerId int PK,
ManagerName nvarchar(50)
和
Clients:
ClientId int,
ClientName nvarchar(50),
ManagerId int, WhenAdded datetime
我将经理列表存储在Managers表中。 Clients表中的每个客户端都有一个相应的管理器。
我想要一个返回以下表的SQL查询:
ManagerName nvarchar(50),
NumberOfClients int
我的问题是:
如果经理没有客户。 Sql查询在结果表中不包含ManagerName
。
我尝试了这个查询:
SELECT M.ManagerName, COUNT(*)
FROM
Clients AS C left join Managers AS M
ON
C.ManagerId = M.ManagerId
GROUP BY
M.ManagerName
第二个问题
与第一个问题相同,但是如果我想在客户端的where
字段中添加WhenAdded
子句。即使ManagerName
,查询也必须返回NumberOfClients
和NumberOfClients=0
。
答案 0 :(得分:1)
您可以使用:
SELECT ManagerName, (SELECT Count(ClientID) FROM Clients C WHERE
C.ManagerID=M.ManagerID) As NumberOfClients FROM Managers M;
或者这个:
SELECT ManagerName, Count(C.ClientID) As NumberOfClients FROM Managers M
LEFT JOIN Clients C ON M.ManagerID=C.ManagerID GROUP BY M.ManagerID,
M.ManagerName;
您的查询存在的问题是您使用Clients表作为基本表。
对于第二个问题,你可以使用它:
SELECT ManagerName, (SELECT Count(ClientID) FROM Clients C WHERE
WhenAdded<DATEADD(day, 1, GETDATE()) AND M.ManagerID=C.ManagerID) As
NumberOfClients FROM Managers M;
答案 1 :(得分:0)
这应该有效。虽然不是很优化!
select m.ManagerName , count(c.ManagerId) from Managers m, Clients c where
m.ManagerId = c.ManagerId group by c.ManagerId