我想选择一个表的所有列,加上一个部门的员工总数。这是为了创建样本数据:
DECLARE @CompanyTable TABLE
(
[EMPID] int NOT NULL,
[FNAME] [nvarchar](60) NOT NULL,
[LNAME] [nvarchar](60) NOT NULL,
[COUNTRY] [varchar](50) NOT NULL,
[CITY] [nvarchar](50) NOT NULL,
[DEPARTMENT] [nvarchar](30) NOT NULL)
insert into @CompanyTable VALUES (1, 'ANGEL', 'HILL','US','SF','HR')
,(2, 'ANGEL', 'HILL','US','TAMPA','HR')
,(3, 'VICTOR', 'FENCL','US','NEW YORK','TECH')
,(4, 'ANNA', 'NEAL','US','CLEVELAND','HR')
,(5, 'CARRIE', 'NICHOLS','CANADA','EDMINTON','HR')
,(6, 'CATHY', 'HILL','CANADA','TORONTO','PAYROLL')
,(7, 'LINDA', 'REED','CANADA','TORONTO','HR')
,(8, 'ANNA', 'NEAL','UK','LONDON','HR')
,(9, 'JAIME', 'RODRIGUEZ','UK','LONDON','TECH')
,(10, 'DANA', 'NICHOLS','US','SF','HR')
,(11, 'ANGEL', 'WEBB','US','SF','PAYROLL')
,(12, 'CATHY', 'JORDAN','US','SF','TECH');
我可以做到这一点,无需选择所有列并分组到其中一个
SELECT
[DEPARTMENT], count([EMPID]) [EMP_COUNT]
FROM @CompanyTable
GROUP by [DEPARTMENT]
但是如何选择所有列以及每个部门的 EMP_COUNT 总数,类似
EMPID FNAME LNAME COUNTRY CITY DEPARTMENT EMP_COUNT
1 ANGEL HILL US SF HR 7
2 ANGEL HILL US TAMPA HR 7
3 VICTOR FENCL US NEW YORK TECH 3
4 ANNA NEAL US CLEVELAND HR 7
5 CARRIE NICHOLS CANADA EDMINTON HR 7
6 CATHY HILL CANADA TORONTO PAYROLL 2
7 LINDA REED CANADA TORONTO HR 7
8 ANNA NEAL UK LONDON HR 7
9 JAIME TIPTON UK LONDON TECH 3
10 DANA NICHOLS US SF HR 7
11 ANGEL WEBB US SF PAYROLL 2
12 CATHY JORDAN US SF TECH 3
实现这一目标的最佳方法是什么?
您可以使用windows功能,按部门分区。这在许多 DBMS 中都有效。如果这不适合您,请标记您的 DBMS。
SELECT
*,
count(empid) over (partition by department) as emp_count
FROM @CompanyTable
order by empid