如何计算SQL

时间:2017-11-10 18:03:44

标签: sql

  

编辑:从下面的评论中采取/推断的模式

create table #employees 
(
    Emp_ID int,
    Name varchar(50),
    Dept_ID int,
);

create table #departments
(
    Dept_ID int,
    Dept_Name varchar(50)
);

如何计算在表部门中每个部门工作的表员工的员工数量,并包括所有没有员工的部门。

2 个答案:

答案 0 :(得分:0)

由于您没有提供任何数据,请尝试以下内容,看看这是否适合您

创建表格,我不知道这是否与您的表格结构类似

CREATE TABLE tbl_EMPLOYEES (Empl_Name nvarchar(20), Dept nvarchar(15))

CREATE TABLE tbl_DEPARTMENT (Dept nvarchar(15))

填充这些表格

INSERT INTO tbl_EMPLOYEES Values ('James', 'Finance')
INSERT INTO tbl_EMPLOYEES Values ('Tim', 'HR')
INSERT INTO tbl_EMPLOYEES Values ('Sally', 'Finance')
INSERT INTO tbl_EMPLOYEES Values ('Bob', 'Sales')
INSERT INTO tbl_EMPLOYEES Values ('Sam', 'HR')
INSERT INTO tbl_EMPLOYEES Values ('James', 'Finance')

INSERT INTO tbl_DEPARTMENT Values ('Finance')
INSERT INTO tbl_DEPARTMENT Values ('HR')
INSERT INTO tbl_DEPARTMENT Values ('Sales')
INSERT INTO tbl_DEPARTMENT Values ('IT')

此查询将为您提供每个部门的人数

SELECT Dept, Count(Dept) AS Count
FROM
    (
        SELECT Dept 
        FROM tbl_EMPLOYEES
         ) AS Blah_Blah
GROUP BY Dept

答案 1 :(得分:0)

欢迎来到SO。

这个问题很容易解决。步骤如下:

  1. 部门表加入Dept_ID列的员工表。

  2. SELECT Dept_IDCount()以及GROUP BY Dept_ID字段。

  3. 要返回没有员工的部门,您需要LEFT JOIN此聚合到Dept_ID列上的部门表。

  4. 要为没有员工的部门返回 0 的值,请使用ISNULL()功能。

  5. 请使用您的架构查看以下示例脚本。请注意,此脚本是用T-SQL编写的,因为您没有提到您的服务器类型。

    create table #employees 
    (
        Emp_ID int,
        Name varchar(50),
        Dept_ID int,
    );
    
    create table #departments
    (
        Dept_ID int,
        Dept_Name varchar(50)
    );
    
    insert into #employees
    select 1, 'Pim', 1
    union all
    select 2, 'Salma', 2;
    
    insert into #departments
    select 1, 'IT'
    union all
    select 2, 'Marketing'
    union all
    select 3, 'Design'
    
    select
        d1.Dept_Name
        ,isnull(d2.EmployeeCount, 0) as EmployeeCount
    from
        #departments d1
    left join
        (
            select
                d.Dept_ID
                ,count(e.Dept_ID) as EmployeeCount
            from
                #departments d
            join
                #employees e
                on e.Dept_ID = d.Dept_ID
            group by
                d.Dept_ID
        )
        d2
        on d2.Dept_ID = d1.Dept_ID
    
    drop table #employees
    drop table #departments