Sql-Server-2014

三個表有一些匹配的數據和一些不匹配的數據 - 想要來自所有三個的數據

  • February 23, 2019

我有三張桌子

成本(47 行) 預算(60 行) 承諾成本(12 行)

所有三個都有相同的 2 個欄位,而不是一個數字 JobNumber、CostCode(成本、預算、commitedcosts)

它們都有相同的 JobNumber 並且它們都有共同的 CostCode。然而,它們也都有獨特的 CostCodes。我需要執行一個查詢,它可以從所有三個表中獲取結果,如下所示:

JobNumber、CostCode、成本、預算、CommitedCosts

目前我在三個表上使用外連接,並且只得到 47 個結果,因為 Costs 表是從中選擇的第一個表。

不確定我是否完全關注,但也許這就是你要找的?

我正在獲取所有三個表,然後使用 UNION ALL(合併但不刪除重複記錄)將它們轉換為單個表,將 NULL 放置在未共享的列中。然後,我將使用該合併表並對您的兩個常見列(JobNumber、CostCode)進行分組。我不確定您要從其他三列中獲取什麼樣的數據…您是否正在從每個表中查找該 JobNumber+CostCode 的記錄數?或者也許是總和?

因此,此範例查詢將為您提供 JobNumber+Costcode 的唯一列表,以及每個列表的 Cost、Budget 和 CommitedCosts 的總和:

SELECT x.JobNumber, x.CostCode
   , Costs = SUM(x.Costs)
   , Budgets = SUM(x.Budgets)
   , CommitedCosts = SUM(x.CommitedCosts)
FROM (
   SELECT JobNumber, CostCode
       , Costs
       , Budgets = NULL
       , CommitedCosts = NULL
   FROM Costs
   UNION ALL
   SELECT JobNumber, CostCode
       , Costs = NULL
       , Budgets
       , CommitedCosts = NULL
   FROM Budgets
   UNION ALL
   SELECT JobNumber, CostCode
       , Costs = NULL
       , Budgets = NULL
       , CommitedCosts
   FROM CommitedCosts
) x
GROUP BY x.JobNumber, x.CostCode

請試試這個,你可能會得到你的答案。

如果您在同一個表中有多個條目,那麼您需要在查詢下方輸入成本總和 i 以獲得實際值。


選擇 a.*,b.Costs,c.Budgets,d.CommitedCosts
從
(從 Costs 中選擇不同的 JobNumber、CostCode
聯盟
從 Costs 中選擇不同的 JobNumber、CostCode
聯盟
從 Costs 中選擇不同的 JobNumber、CostCode)a
左外連接
(從成本中選擇 *)b
a.JobNumber=b.JobNumber 和 a.CostCode =b.CostCode
左外連接
(從成本中選擇 *)c
a.JobNumber=c.JobNumber 和 a.CostCode =c.CostCode
左外連接
(從成本中選擇 *)d
a.JobNumber=d.JobNumber 和 a.CostCode =d.CostCode

引用自:https://dba.stackexchange.com/questions/230520