给出如下简单的表结构:
Departments PK - DeptID DeptName -------------------------- 1 Department 1 2 Department 2 3 Department 3 4 Department 4 Groups PK - GroupdID DeptID -------------------------- 1 1 2 1 3 3 4 4 5 2 6 3 7 1 8 3 Inventory PK - ItemID GroupID -------------------------- 1 2 2 3 3 8 4 1 5 4 6 5 7 1 8 2 9 2 10 3 11 7
有没有一种方法可以在不使用子查询的情况下(很简单)获得部门列表、每个部门的组数以及每个部门的库存数?
示例输出:
DeptID DeptName GroupCount ItemCount
-----------------------------------------------------
1 Department 1 3 6
2 Department 2 1 1
3 Department 1 3 3
4 Department 4 1 1
我的直觉告诉我,让 GROUP BY 语句正确只是一件简单的事情,但到目前为止我还是一片空白。如果确实需要使用子查询,这不是问题。我只是想确认以供将来引用。
注意:使用 SQL Server 2000 解决此特定问题
最佳答案
SELECT d.deptID,
COUNT(DISTINCT g.GroupID) AS Groups,
COUNT(DISTINCT i.ItemID) AS Items
FROM Departments d
LEFT JOIN
Groups g
ON g.deptID = d.deptID
LEFT JOIN
Items i
ON i.GroupID = g.GroupID
GROUP BY
d.deptID
产生的结果是:
deptID Groups Items
----- ------ -----
1 3 6
2 1 1
3 3 3
4 1 1
这也将为没有Groups
或只有Groups
的Departments
生成正确的0
> 没有 Items
。
关于tsql - SQL 查询中的多个计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/734305/