【问题标题】:simplify a join query?简化连接查询?
【发布时间】:2014-04-14 21:41:31
【问题描述】:

我希望每个员工部门获得最多的星数,因此从表 csereduxresponses 中添加每个部门的星数,然后使用 employee.cse_dept(每个部门的员工数)除以。受雇人员 = 部门 ID,雇员 = 雇员 ID。 我做了一个模拟表来简化。

    create table csereduxresponds  (employeedept int, employee int, stars int);

insert into csereduxresponds  values(1,1,1);
insert into csereduxresponds  values(1,1,0);
insert into csereduxresponds  values(1,1,1);
insert into csereduxresponds  values(1,2,1);
insert into csereduxresponds  values(1,2,0);
insert into csereduxresponds  values(3,3,1);
insert into csereduxresponds  values(3,3,1);
insert into csereduxresponds  values(4,3,1);
insert into csereduxresponds  values(4,3,0);
insert into csereduxresponds  values(4,3,1);
insert into csereduxresponds  values(4,3,1);
insert into csereduxresponds  values(5,4,0);
insert into csereduxresponds  values(5,4,1);
insert into csereduxresponds  values(5,4,1);

create table employee ( dept_id int,emp_id int,cse_dept int);

insert into employee values (1,1,14);
insert into employee values (1,2,14);
insert into employee values (3,3,8);
insert into employee values (5,4,9);
insert into employee values (6,5,10);

create table csereduxdepts(csedept_id int, dept_name varchar(25));
insert into  csereduxdepts(1,'dapartmen one');
insert into  csereduxdepts(2,'dapartmen two');
insert into  csereduxdepts(3,'dapartmen 3');
insert into  csereduxdepts(4,'dapartmen 4');
insert into  csereduxdepts(5,'dapartmen 5');
insert into  csereduxdepts(6,'dapartmen 6');

我有一个类似的查询,它获取每个员工的总星数,但不是按部门:

  select a.employee, a.execoffice_status,a.employeedept, b.csedept_id as department_id , b.csedept_name as department_name,
  SUM(execoffice_status) as total_stars,RANK() OVER(ORDER BY SUM(execoffice_status)desc )as rnk
  from intranet.dbo.CSEReduxResponses a join intranet.dbo.CSEReduxDepts b
  on b.csedept_id = a.employeedept
  group by employee,execoffice_status,employeedept,csedept_id,csedept_name
  order by rnk 

我放弃添加另一个包含部门名称的表。 在这里我想输出部门名称和星星/cse_dept

【问题讨论】:

  • 你能显示你想要的输出吗?

标签: sql sql-server


【解决方案1】:

根据您提供的信息,这里是每个部门每个员工的星数除以每个部门员工的静态值 (cse_dept)。 PerCSE 显示为百分比。

SELECT  employeedept
      , employee
      , SUM(stars) NumStars
      , MAX(cse_dept) EmployeeDeptCount
      , SUM(stars) * 100.00 / MAX(cse_dept) AS PerCSE
FROM    employee e
JOIN    csereduxresponds c
        ON employeedept = dept_id
           AND employee = emp_id
GROUP BY employeedept
      , employee

这里是根据提供的条件加入。

SELECT  *
FROM    employee e
JOIN    csereduxresponds c
        ON employeedept = dept_id
           AND employee = emp_id

【讨论】:

    【解决方案2】:
    ;WITH CTE
    AS
    ( 
    
    select employeedept
    , employe From employee e 
    )
    Select c.employeedept
    , c.employe
    , SUM(cc.stars) NumStars
    , MAX(cc.cse_dept) EmployeeDeptCount
    , SUM(cc.stars) * 100.00 / MAX(cc.cse_dept) AS PerCSE
     From CTE C
    INNER JOIN csereduxresponds cc
    ON C.employeedept = cc.dept_id
    AND C.employee = CC.emp_id
    

    【讨论】:

      猜你喜欢
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      相关资源
      最近更新 更多