【问题标题】:Full join two tables with three merged columns and some unique columns完全连接具有三个合并列和一些唯一列的两个表
【发布时间】:2018-06-18 14:17:26
【问题描述】:

下面的任何帮助都会很棒,我已经尝试了好几天才能做到这一点。

根据下面的屏幕截图,我有两个表:

我需要的是一个新表,其中包含单个 PeriodPropertyIDTransactionCodeID 列。

这些必须使用两个表中的值列BalanceBFBudgetAmountActualAmountRevisedBudget 填充,其中任何一个列在上述任一表中的一行中。

因此,两个表中的所有值都必须出现,并且可以在适用的情况下合并为一行。

我尝试过FULL OUTER JOIN 和其他连接类型,但没有成功

关于如何做到这一点的任何想法?

如果我可以附加 (coalesce?) 前三列,那么 FULL OUTER JOIN 这两个表的值列会起作用吗?不知道该怎么做。

编辑:

我正在使用以下代码:

SELECT         
    dbo.PropertyBudgets.Period, 
    dbo.PropertyBudgets.PropertyID, 
    dbo.PropertyBudgets.TransactionCodeID, 
    dbo.AccountBalances.BalanceBf, 
    dbo.PropertyBudgets.BudgetAmount, 
    dbo.PropertyBudgets.ActualAmount, 
    dbo.PropertyBudgets.RevisedBudget
FROM
    dbo.AccountBalances 
FULL OUTER JOIN
    dbo.PropertyBudgets ON dbo.AccountBalances.PropertyID = dbo.PropertyBudgets.PropertyID 
                        AND dbo.AccountBalances.TransactionCodeID = dbo.PropertyBudgets.TransactionCodeID 
                        AND dbo.AccountBalances.Period = dbo.PropertyBudgets.Period
WHERE        
    (NOT (dbo.AccountBalances.BalanceBf = 0)) OR
    (NOT (dbo.PropertyBudgets.BudgetAmount = 0)) 
    OR (NOT (dbo.PropertyBudgets.ActualAmount = 0)) 
    OR (NOT (dbo.PropertyBudgets.RevisedBudget =0))`

我得到以下结果输出:

可以看出BalanceBF 列返回值的位置,其他列是NULL(在前三列中)我希望这些具有AccountBalances 表中表中的适用值我尝试这样做下面:

所以下图中最后三列的值只需要在下图中出现null的前三列中即可:

请告诉我什么是可能的。

【问题讨论】:

  • 样本数据和期望的结果真的很有帮助。
  • @GordonLinoff 请参阅编辑,希望它能澄清事情。

标签: sql database


【解决方案1】:

问题已在 SSIS 中解决,方法是从两个表中选择所有文本列,执行 union all join,使用 aggregate 删除重复项,然后将两个表中的数字数据列 outer joining 删除到联合表。

【讨论】:

    猜你喜欢
    • 2019-04-03
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多