Tas*_*que 2 sql sql-server sql-server-2012
我有以下数据
组件
componentid title
1 houseRent
2 medical
3 Travelling Allowance
Run Code Online (Sandbox Code Playgroud)
empPayrollMaster
MasterID EmployeeID SalaryMonthID
1 101 1
2 102 1
3 103 1
Run Code Online (Sandbox Code Playgroud)
empPayrollDetail
DetailID MasterID ComponentID amount
1 1 1 100
2 1 2 500
3 2 1 300
4 2 3 250
5 3 1 150
6 3 2 350
7 3 3 450
Run Code Online (Sandbox Code Playgroud)
要求的输出
EmployeeID MasterID ComponentID amount
101 1 1 100
101 1 2 500
101 1 3 0
102 2 1 300
102 1 2 0
102 2 3 250
103 3 1 150
103 3 2 350
103 3 3 450
Run Code Online (Sandbox Code Playgroud)
要获得所需的输出,如果我之间保持外部连接components,empPayrollDetail我将获得nullEmployeeID和MasterID以及数量列.如何修改左连接以获取所需的输出
你需要做CROSS JOIN的Components,并empPayrollMaster首先产生的员工和组件的所有组合.然后,使用for s 做一个LEFT JOINon empPayrollDetail来实现结果.ISNULL(amount, 0)NULL amount
SELECT
epm.EmployeeID,
epm.MasterID,
c.ComponentID,
amount = ISNULL(epd.amount, 0)
FROM empPayrollMaster epm
CROSS JOIN Components c
LEFT JOIN empPayrollDetail epd
ON epd.MasterID = epm.MasterID
AND epd.ComponentID = c.ComponentID
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |