如何在 SQL 查询中选择除一列的 COUNT 之外的所有列

问题描述 投票:0回答:1

我想选择一个表的所有列,加上一个部门的员工总数。这是为了创建样本数据:

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

实现这一目标的最佳方法是什么?

sql count
1个回答
0
投票

您可以使用windows功能,按部门分区。这在许多 DBMS 中都有效。如果这不适合您,请标记您的 DBMS。

SELECT 
     *, 
     count(empid) over (partition by department) as emp_count
  FROM @CompanyTable
 order by empid
© www.soinside.com 2019 - 2024. All rights reserved.