SQL-在左外部联接查询中添加缺失数据

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以及数量列.如何修改左连接以获取所需的输出

Fel*_*tan 6

你需要做CROSS JOINComponents,并empPayrollMaster首先产生的员工和组件的所有组合.然后,使用for s 做一个LEFT JOINon empPayrollDetail来实现结果.ISNULL(amount, 0)NULL amount

SQL小提琴

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)