如何使用SQL查询将相同字段分组到一个字段下?

3
我有一张包含数据的表格,如下所示:
emp_no  emp_name        login  HOD_code  Level  
E43057  Ankita Barde     9:45  P00212    直属
E33995  Rakesh Sharma    8:15  P00212    直属
E31446  Amit Singh      10:45  P00212    直属
E44920  Shweta Salve     9:38  E33995    非直属   
E39787  Anita Shenoy     9:15  E31446    非直属   
E37731  Ramesh Shukla    9:10  E31446    非直属   
E43455  Manish Shukla   11:01  E33995    非直属   
E43130  Lubna Shaikh     9:39  E33995    非直属
在上面的表中,我有一个HOD代码(P00212),它是所有员工的上级。因此,映射到P00212的员工在LEVEL列中被指定为直属员工,而其他所有员工都是间接的。但是这些间接员工是在直属员工下映射的。
例如:P00212是Rakesh Sharma(E33995)的HOD,而E33995是3名其他员工,即Shweta(E44920)、E43455和E43130的HOD。因此,我想按照以下方式编写查询,使输出如下所示:
emp_no  emp_name        login  HOD_NO  Level    
E43057  Ankita Barde     9:45  P00212  直属
E33995 Rakesh Sharma 8:15 P00212 直属 E43455 Manish Shukla 11:01 E33995 非直属 E43130 Lubna Shaikh 9:39 E33995 非直属 E44920 Shweta Salve 9:38 E33995 非直属
E31446 Amit Singh 10:45 P00212 直属 E39787 Anita Shenoy 9:15 E31446 非直属 E37731 Ramesh Shukla 9:10 E31446 非直属
您该如何实现这一目标?
2个回答

4

SQLFiddle Example

select * from t
order by CASE WHEN HOD_CODE='P00212' THEN EMP_NO ELSE HOD_CODE END,
         CASE WHEN HOD_CODE='P00212' THEN 0 ELSE 1 END

谢谢,它起作用了。我得到了我的解决方案...你能详细解释一下它是如何工作的吗?非常感谢 :) - shweta
1
@shweta:首先,我们按HOD_CODE排序,但对于P00212,我们得到的不是HOD_CODE而是emp_no。因此,我们按需要分组记录。在第二个排序表达式中,我们按组内记录排序,如果是P00212,则将其放置在顶部。 - valex

1
你可以尝试以下的方法:
select 
    *, 
    case 
        when (HOD_CODE='P00212') 
        then emp_no 
        else HOD_code 
    end as Parent
from Table
Order by Parent, Emp_No

SQL Fiddle

{{链接1:SQL Fiddle}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接