SQL Server Left Join 产生重复项

SQL Server Left Join producing duplicates

我有 3 个 table,预算、收入和支出。

预算 table:

收入 table:

费用 table:

这是我的SQL声明:

SELECT 
    Budgets.BudgetID, Budgets.BudgetName, Budgets.Username_FK,   
    Budgets.BudgetAmount, Budgets.SavePercentage,
    Expenses.ExpensesID, Expenses.ExpensesAmount, Expenses.ExpensesCategory,
    Income.IncomeID, Income.IncomeAmount, Income.IncomeCategory
FROM 
    Budgets
LEFT JOIN 
    Income ON Budgets.BudgetID = Income.BudgetID_FK
LEFT JOIN 
    Expenses ON Budgets.BudgetID = Expenses.BudgetID_FK
WHERE 
    BudgetName = '2019

结果如下:

根据我的 Income table,只有 1 条记录绑定到 BudgetID = 3,但在左连接中,它重复了。

理想情况下,我希望它在副本上 return "null"。我该怎么做?

您在每个 budgetID 中的 expenses 中有几行,因此您的联接会产生那么多行。我倾向于怀疑 income 也会发生同样的情况。

如果您想要每个 budgetID 一行,那么一个选项是预聚合和 left join(或 outer apply)。假设您想要每个预算的总支出和收入,您会这样做:

select b.*, e.expenseAmount, i.amountAmount
from budgets b
left join (
    select budgetID_FK, sum(expenseAmount) expenseAmount 
    from expenses 
    group by budgetID_FK
) e on e.budgetID_FK = b.budgetID
left join (
    select budgetID_FK, sum(incomeAmount) incomeAmount 
    from income 
    group by budgetID_FK
) i on i.budgetID_FK = b.budgetID

现在您按 budgetID 对相关表中的行进行分组,因此您看不到这些表的其他列,例如 incomeCategoryexpenseCategory(其中有每个 budgetID).

多个值

对于 budgetID 3,您有 4 笔费用(不同的费用 ID),费用为 50.00 table 同一用户。我认为您想要的是相同类别和预算 ID 的总费用,即本例中的 budgetID 3

SELECT 
Budgets.BudgetID, Budgets.BudgetName, Budgets.Username_FK,   
Budgets.BudgetAmount, Budgets.SavePercentage,
Income.IncomeID, Income.IncomeAmount, Income.IncomeCategory,
ex.ExpensesCategory,
ex.Total_ExpensesAmount, 

FROM Budgets 
LEFT JOIN Income ON Budgets.BudgetID = Income.BudgetID_FK
LEFT JOIN (Select BudgetID_FK, ExpensesCategory, SUM(ExpensesAmount) as Total_ExpensesAmount
           FROM Expenses 
           GROUP BY BudgetID_FK, ExpensesCategory) ex ON Budgets.BudgetID = ex.BudgetID_FK
WHERE BudgetName = '2019'