2016-01-30 72 views
0

我想對於瞭解一點SQL的人來說,這應該相對容易一些。在SQL內部連接表中加上2列

這裏是我當前的腳本:

SELECT t1.Invoice_Number 
     ,t1.Override_Cashier_ID 
     ,t1.Exception_Type 
     ,t1.ItemNum 
     ,t1.Amount 
     ,t1.Quantity 
     ,t1.Amount*t1.Quantity AS Total 
     ,t1.Reason_Code 
     ,t2.DateTime 
    FROM [esql].[dbo].[Invoice_Exceptions] AS t1 
    INNER JOIN [esql].[dbo].[Invoice_Totals] AS t2 
    ON t1.Invoice_Number = t2.Invoice_Number 
    WHERE t1.Exception_Type = 2 
    AND CAST(t2.DateTime as date) > '20160127' 
    AND CAST(t2.DateTime as date) < '20170101' 

我要完成兩兩件事:

  1. 琛的 '合計' 欄,是這樣的:SUM(t1.Amount * t1.Quantity) AS總計
  2. 將這些由'Reason_Code'組成的字符串組合起來。假設原因代碼包含2種不同的值可能性,「我」和「你」。我希望在查詢運行後只顯示2行,對於包含相加值的每個原因代碼,只顯示1行。

一些示例數據將是:

的數量和金額列都是小數。我期望最終的數據看起來像這樣:

Reason_Code - Total - Date_Range 
Me    4000  2016-01-27 - 2017-01-01 
You    3500  2016-01-27 - 2017-01-01 


Where some sample data may be: 

Invoice_Number - Reason_Code - Amount - Quantity - Total - DateTime 
12345    Me    500  2   1000  2016-01-29 21:24:07.000 
12346    Me    1000  3   3000  2016-01-29 23:15:19.000 
12347    You    500  1   500  2016-01-29 19:00:17.000 
12348    You    1000  3   3000  2016-01-29 21:46:29.000 

我希望這是足夠簡潔!謝謝你的幫助!

編輯:

因此,使用建議,到目前爲止,我意識到我必須在SQL didnt帶來了太多的數據知道該怎麼做。我現在有這個,有95%:

SELECT 
    sum(t1.Amount*t1.Quantity) AS Total 
    ,t1.Reason_Code 

    FROM [esql].[dbo].[Invoice_Exceptions] AS t1 
    INNER JOIN [esql].[dbo].[Invoice_Totals] AS t2 

    ON t1.Invoice_Number = t2.Invoice_Number 

    WHERE t1.Exception_Type = 2 
    AND CAST(t2.DateTime as date) > '20160127' 
    AND CAST(t2.DateTime as date) < '20170101' 

    GROUP BY t1.Reason_Code 

現在有什麼方法顯示日期範圍?

+1

你能分享一些樣本數據和你試圖得到的結果嗎? – Mureinik

+0

或者至少你的表格架構?理想情況下,您應該提供一個設置腳本來創建表格並用一些虛擬數據填充它們。這對那些想要提供經過測試的答案的人非常有幫助。 – Alexei

+0

我對原始帖子進行了編輯。如果可能的話,我主要工作但只需顯示日期範圍... – tmman

回答

0

這聽起來像你可以做你的建議正是: 添加GROUP BY Reason_Code條款,並在您SELECT語句中使用sum(t1.Amount*t1.Quantity) AS Total。但是你也要需要定義如何處理你想在你的兩行中包含的其他列。要麼你必須將它們添加到GROUP BY或者你必須找到一個合適的聚合函數來確定包含哪個值。