如何在使用 group by 子句时获取另一列值?
How to get another column value while using group by clause?
我不知道该如何查询。
我需要计算拥有 IdApprover 的员工下属的员工人数,但这只是一个 table。我想要批准人的姓名,其中对应于 IdApprover = IdEmployee
SELECT COUNT(IdApprover), IdApprover, EmployeeName
FROM tblEmployee
GROUP BY IdApprover
ORDER BY COUNT(IdApprover) DESC
上面提到的所有列都在同一个 table 上。
我想得到
Count(IdApprover) IdApprover EmployeeName
3 45 John Doe
2 26 James Bond
其中员工姓名为审批人姓名,也是员工。
暗中试探我假设你的 tblEmployee table 看起来有点像这样
DECLARE @tblEmployee TABLE
(
IdApprover int not null,
IdEmployee int not null,
EmployeeName nvarchar(50) not null
)
INSERT INTO @tblEmployee VALUES (1,1,'Approver 1');
INSERT INTO @tblEmployee VALUES (2,2,'Approver 2');
INSERT INTO @tblEmployee VALUES (3,3,'Approver 3');
INSERT INTO @tblEmployee VALUES (1,4,'Employee 1');
INSERT INTO @tblEmployee VALUES (1,5,'Employee 2');
INSERT INTO @tblEmployee VALUES (1,6,'Employee 3');
INSERT INTO @tblEmployee VALUES (2,4,'Employee 4');
INSERT INTO @tblEmployee VALUES (2,4,'Employee 5');
INSERT INTO @tblEmployee VALUES (3,4,'Employee 6');
INSERT INTO @tblEmployee VALUES (3,4,'Employee 7');
INSERT INTO @tblEmployee VALUES (3,4,'Employee 8');
INSERT INTO @tblEmployee VALUES (3,4,'Employee 9');
记录是这样的,前 3 条记录是由 IdApprover = IdEmployee 指定的审批人,员工链接到不同的员工(他们的审批人)。
IdApprover
IdEmployee
EmployeeName
1
1
Approver 1
2
2
Approver 2
3
3
Approver 3
1
4
Employee 1
1
5
Employee 2
1
6
Employee 3
2
4
Employee 4
2
4
Employee 5
3
4
Employee 6
3
4
Employee 7
3
4
Employee 8
3
4
Employee 9
为了解决您的问题,我将使用几个子查询,首先获取每个审批人的员工数量(不包括审批人本身),其次使用您对 IdApprover = 的要求获取审批人的姓名IdEmployee.
SELECT
c.IdApprover
,a.EmployeeName AS ApproverName
,c.EmployeeCount
FROM
(
-- Get Counts first and put in sub query wrapper
SELECT
IdApprover
,COUNT(IdApprover) AS EmployeeCount
FROM @tblEmployee
WHERE IdApprover <> IdEmployee
GROUP BY
IdApprover
) c
JOIN
(
-- Sub query to get Approver names
SELECT
IdApprover
,EmployeeName
FROM @tblEmployee
WHERE IdApprover=IdEmployee
) a ON a.IdApprover=c.IdApprover
这给了我们
的结果
IdApprover
ApproverName
EmployeeCount
1
Approver 1
3
2
Approver 2
2
3
Approver 3
4
我不知道该如何查询。 我需要计算拥有 IdApprover 的员工下属的员工人数,但这只是一个 table。我想要批准人的姓名,其中对应于 IdApprover = IdEmployee
SELECT COUNT(IdApprover), IdApprover, EmployeeName
FROM tblEmployee
GROUP BY IdApprover
ORDER BY COUNT(IdApprover) DESC
上面提到的所有列都在同一个 table 上。 我想得到
Count(IdApprover) IdApprover EmployeeName
3 45 John Doe
2 26 James Bond
其中员工姓名为审批人姓名,也是员工。
暗中试探我假设你的 tblEmployee table 看起来有点像这样
DECLARE @tblEmployee TABLE
(
IdApprover int not null,
IdEmployee int not null,
EmployeeName nvarchar(50) not null
)
INSERT INTO @tblEmployee VALUES (1,1,'Approver 1');
INSERT INTO @tblEmployee VALUES (2,2,'Approver 2');
INSERT INTO @tblEmployee VALUES (3,3,'Approver 3');
INSERT INTO @tblEmployee VALUES (1,4,'Employee 1');
INSERT INTO @tblEmployee VALUES (1,5,'Employee 2');
INSERT INTO @tblEmployee VALUES (1,6,'Employee 3');
INSERT INTO @tblEmployee VALUES (2,4,'Employee 4');
INSERT INTO @tblEmployee VALUES (2,4,'Employee 5');
INSERT INTO @tblEmployee VALUES (3,4,'Employee 6');
INSERT INTO @tblEmployee VALUES (3,4,'Employee 7');
INSERT INTO @tblEmployee VALUES (3,4,'Employee 8');
INSERT INTO @tblEmployee VALUES (3,4,'Employee 9');
记录是这样的,前 3 条记录是由 IdApprover = IdEmployee 指定的审批人,员工链接到不同的员工(他们的审批人)。
IdApprover | IdEmployee | EmployeeName |
---|---|---|
1 | 1 | Approver 1 |
2 | 2 | Approver 2 |
3 | 3 | Approver 3 |
1 | 4 | Employee 1 |
1 | 5 | Employee 2 |
1 | 6 | Employee 3 |
2 | 4 | Employee 4 |
2 | 4 | Employee 5 |
3 | 4 | Employee 6 |
3 | 4 | Employee 7 |
3 | 4 | Employee 8 |
3 | 4 | Employee 9 |
为了解决您的问题,我将使用几个子查询,首先获取每个审批人的员工数量(不包括审批人本身),其次使用您对 IdApprover = 的要求获取审批人的姓名IdEmployee.
SELECT
c.IdApprover
,a.EmployeeName AS ApproverName
,c.EmployeeCount
FROM
(
-- Get Counts first and put in sub query wrapper
SELECT
IdApprover
,COUNT(IdApprover) AS EmployeeCount
FROM @tblEmployee
WHERE IdApprover <> IdEmployee
GROUP BY
IdApprover
) c
JOIN
(
-- Sub query to get Approver names
SELECT
IdApprover
,EmployeeName
FROM @tblEmployee
WHERE IdApprover=IdEmployee
) a ON a.IdApprover=c.IdApprover
这给了我们
的结果IdApprover | ApproverName | EmployeeCount |
---|---|---|
1 | Approver 1 | 3 |
2 | Approver 2 | 2 |
3 | Approver 3 | 4 |