Sql-Server-2014
三個表有一些匹配的數據和一些不匹配的數據 - 想要來自所有三個的數據
我有三張桌子
成本(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