无法正确分组数据

时间:2019-06-27 13:46:23

标签: sql

我有下表

emp id    Teamid   emp_add   emp_type
112        1000         mum       Sup
153        1000         del       int
146        1000         lon       man
124        1000         kar       lead

我想通过这种方式对表进行分组:

Super_id   EMP_ID  Team_id  emp_add  emp_type 
112         146     1000     lon       man
112         153     1000     del       int
112         124     1000     kar       lead

我写了以下代码:

select case when emp_type = 'sup' then emp_id else null as Super_id,
       case when emp_type <> 'sup' then emp_id,
teamid, emp_add, emp_type

from table
group by team_id, emp_type, emp_add;

我得到以下输出:

super_id   emp_id   team_id   emp_add   emp_type
null        146        1000    lon        man
null        153        1000    del        int
null        124        1000    kar        lead

有人可以建议正确的密码

3 个答案:

答案 0 :(得分:0)

您遇到问题,'sup'必须是'Sup'

select (select max(emp_id) from table where emp_type = 'Sup') super_id,
    emp_id,
    teamid, emp_add, emp_type
from table
where emp_type != 'Sup';

但是您试图实现的目标看起来并不合理

答案 1 :(得分:0)

您可以进行自我加入:

SELECT 
sup.empid AS super_id, 
emp.empid, 
emp.teamid, 
emp.emp_add,
emp.emp_type
FROM your_table emp
LEFT JOIN (
            SELECT * 
            FROM your_table  sup
            WHERE emp_type = 'Sup'
            ) sup
ON emp.teamid = sup.teamid

WHERE emp.empid <> sup.empid

答案 2 :(得分:0)

您可以使用以下代码:

select  a.Super_id,b.emp_id,b.teamid,b.emp_add,b.emp_type
FROM
(SELECT MIN(emp_id) as  Super_id FROM table) a,
(SELECT emp_id,teamid, emp_add, emp_type FROM table WHERE emp_id NOT IN(SELECT MIN(emp_id) emp_id  FROM table)) b