这里我有两个表,Employee
和Department
,数据如下。Employee
:
Empid Empname Deptid salary
-----------------------------------------
1 rama 2 20000.00
2 sita 2 30000.00
3 gita 4 45000.00
4 rohit 4 40000.00
5 lata 5 50000.00
6 sami 2 23000.00
7 lala 3 35000.00
8 samta 4 41000.00
9 shika 5 55000.00
10 venu 4 4400.00
Department
:
Deptid DeptName DeptReference
---------------------------------------
1 HR 1
2 Engineering 2
3 marketing 1
4 Planning 2
5 Admin 1
6 sales 2
所需输出为
- 包含任意n个员工的员工详细信息的所有部门列表,其中n =部门的部门引用
- 如果n超过该部门的实际员工数,则显示现有员工数,而其余员工将显示空值
输出:(Deptid, Deptname, empid, empname
)
先谢了
纳伦德拉
3条答案
按热度按时间ycggw6v21#
您没有说明您将使用什么标准来选择每个部门要查看的员工。我的示例显示了工资最高的员工。您应该能够轻松地更改此标准以选择任何员工。
v2g6jxz62#
第一步是获取每个部门的n行(其中n为
DeptReference
),您可以通过交叉连接到数字表来实现这一点,我假设您没有数字表,每次都可以动态创建一个,但如果您有,那么您可以使用它:或者
所以这会给予
因此,工程是重复的。然后,您需要使用
ROW_NUMBER
将您的员工按部门排序,我不知道您的顺序应该是什么,所以将只使用EmpID
:因此,对于DeptID = 4,将给予:
然后,只需将为department创建的
Number
列连接到为employee创建的RowNumber
列。由于示例数据中没有Sales部门的雇员,并且
DeptReference
为2,因此这将为Sales生成以下结果:SQL Fiddle示例
2guxujil3#
如果查询应忽略每个部门超过n计数的额外雇员,则尝试以下操作:
如果查询应该 * 包括 * 超出每个部门的n个计数的额外雇员,那么它会变得有点复杂: