2017-02-09 133 views
1

獲取數據的總和我都在下面,我想使用SQL連接到兩個表

SELECT 
    Order_Header.Order_ID, Order_Header.OrderNumber, 
    ISNULL(SUM(SplitValue/CostCentre_CCYRate), 0) AS NetPrice_CCY,Issued_Date 
FROM 
    Order_Header 
LEFT OUTER JOIN 
    Order_CostCentre ON Order_Header.Order_ID = Order_CostCentre.Order_ID 
WHERE 
    Order_CostCentre.CostCentre_ID = 3093 
    AND Order_Header.Issued_Date BETWEEN 'start date' AND 'end date' 
    AND Order_Header.Order_Status IN ('ISSUED', 'PARTIAL', 'RECEIVED', 'CLOSED') 
GROUP BY 
    Order_Header.Order_ID 


SELECT 
    Expense_Header.Expense_ID, Expense_Header.Exp_Number, 
    ISNULL(SUM(SplitValue/CostCentre_CCYRate), 0) AS NetPrice_CCY, 
    Exp_Date 
FROM 
    Expense_Header 
LEFT OUTER JOIN 
    Order_CostCentre ON Expense_Header.CostCentre_ID = Order_CostCentre.CostCentre_ID 
WHERE 
    Order_CostCentre.CostCentre_ID = 3093 
    AND Expense_Header.Exp_Date BETWEEN 'start date' AND 'end date' 
    AND Expense_Header.Exp_Status IN ('ACCOUNTS_REVIEW', 'REIMBURSED') 
GROUP BY 
    Expense_Header.Expense_ID 

結合兩個查詢我想結合這兩者,使得我得到的值的總和,從這兩張表僅基於Order_CostCentre.CostCentre_ID。請幫助我進行查詢。謝謝。

+0

你想對訂單號/費用號碼做什麼?這些應該如何彙總在一起? –

+0

@TimBiegeleisen實際上所有的記錄應該基於Order_CostCentre.CostCentre_ID來總結,所以它的好,如果我只接受訂單號,我可以排除開支編號 – sumedha

回答

0

一個選項是UNION將您的兩個當前查詢放在一個子查詢中,然後選擇淨價的總和,按訂單ID分組。請注意,爲了可讀性甚至性能,我將兩個原始查詢中的每一個都放入單獨的CTE中。

;WITH cte1 AS (
    SELECT t1.Order_ID, 
      t1.OrderNumber, 
      ISNULL(SUM(SplitValue/CostCentre_CCYRate), 0) AS NetPrice_CCY, 
      Issued_Date 
    FROM Order_Header t1 
    LEFT OUTER JOIN Order_CostCentre t2 
     ON t1.Order_ID = t2.Order_ID 
    WHERE t2.CostCentre_ID = 3093 AND 
      t1.Issued_Date BETWEEN 'start date' AND 'end date' AND 
      t1.Order_Status IN ('ISSUED', 'PARTIAL', 'RECEIVED', 'CLOSED') 
    GROUP BY t1.Order_ID 
), 

WITH cte2 AS (
    SELECT t1.Expense_ID, 
      t1.Exp_Number,  
      ISNULL(SUM(SplitValue/CostCentre_CCYRate), 0) AS NetPrice_CCY, 
      Exp_Date 
    FROM Expense_Header t1 
    LEFT OUTER JOIN Order_CostCentre t2 
     ON t1.CostCentre_ID = t2.CostCentre_ID 
    WHERE t2.CostCentre_ID = 3093 AND 
      t1.Exp_Date BETWEEN 'start date' AND 'end date' AND 
      t1.Exp_Status IN ('ACCOUNTS_REVIEW', 'REIMBURSED') 
    GROUP BY t1.Expense_ID 
) 

SELECT t.Order_ID, 
     SUM(t.NetPrice_CCY) AS NetPrice_CCY_Total 
FROM 
(
    SELECT Order_ID, NetPrice_CCY 
    FROM cte1 
    UNION ALL 
    SELECT Expense_ID, NetPrice_CCY 
    FROM cte2 
) t 
GROUP BY t.Order_ID 
+0

我得到這個錯誤:'關鍵字附近的語法不正確'。如果此語句是公用表表達式,xmlnamespaces子句或變更跟蹤上下文子句,則必須以分號結尾以前的語句。「# – sumedha

+0

@sumedha在兩個CTE之間插入一個逗號。 –

+0

我仍然收到該錯誤 – sumedha

0

這裏的query.try可能對您有所幫助。

;with merged_data as (

select Order_ID,NetPrice_CCY from(
SELECT Order_Header.Order_ID,Order_Header.OrderNumber, 
IsNull(Sum(SplitValue/CostCentre_CCYRate), 0) AS NetPrice_CCY,Issued_Date 
FROM Order_Header 
LEFT OUTER JOIN Order_CostCentre ON Order_Header.Order_ID = Order_CostCentre.Order_ID 
WHERE Order_CostCentre.CostCentre_ID = 3093 
AND Order_Header.Issued_Date BETWEEN 'start date' AND 'end date' 
AND Order_Header.Order_Status IN ('ISSUED','PARTIAL','RECEIVED','CLOSED') 
GROUP BY Order_Header.Order_ID 
) as a 

union all 

select Expense_ID as Order_ID ,NetPrice_CCY from (

SELECT Expense_Header.Expense_ID,Expense_Header.Exp_Number, 
IsNull(Sum(SplitValue/CostCentre_CCYRate), 0) AS NetPrice_CCY,Exp_Date 
FROM Expense_Header 
LEFT OUTER JOIN Order_CostCentre ON Expense_Header.CostCentre_ID = Order_CostCentre.CostCentre_ID 
WHERE Order_CostCentre.CostCentre_ID = 3093 
AND Expense_Header.Exp_Date BETWEEN 'start date' AND 'end date' 
AND Expense_Header.Exp_Status IN ('ACCOUNTS_REVIEW','REIMBURSED') 
GROUP BY Expense_Header.Expense_ID 

) as b 
) 
select Order_ID ,sum(NetPrice_CCY) from merged_data 
group by Order_ID