2017-08-16 41 views
2

假設我有一個MoneyIN和一個MoneyOUT列。我希望將所有這些列整合起來,這樣我就得到了每一列的總和,然後我希望從MoneyIN列的總和中減去MoneyOUT列的總和。我也想顯示一個DateOF列和可能的描述(我想我可以自己做)。訪問2016&SQL:總計兩列,然後減去它們

這將是原來的數據庫,在那裏,我從獲得我的信息:

+-------------+------------------+---------+----------+-----------+ 
    | Location ID | Location Address | Date Of | Money In | Money Out | 
    +-------------+------------------+---------+----------+-----------+ 
    |   1 | blah    | date | 10.00 |  0.00 | 
    |   2 | blah    | date | 2,027.10 |  27.10 | 
    |   2 | blah    | date |  0.00 | 2000.00 | 
    |   1 | blah    | date |  0.00 |  10.00 | 
    |   3 | blah    | date | 5000.00 |  0.00 | 
    +-------------+------------------+---------+----------+-----------+ 

我希望能夠輸入一個位置ID,然後有結果中顯示(在這個例子中,我對2型位置)

+---------+----------+-----------+------+ 
| Date Of | Money In | Money Out |  | 
+---------+----------+-----------+------+ 
| date | 2027.10 |  27.10 |  | 
| date |  0 |  2000 |  | 
| Total: | 2027.10 | 2027.10 | 0 | 
+---------+----------+-----------+------+ 

我曾嘗試其他解決方案(其中之一是指出以下),但是,它們不會在每個整列的總和,他們只是從典昶減去MoneyOUT每一行。截至目前,我試圖在查詢中這樣做,但如果有更好的方法,請詳細說明。 我對SQL和Access非常陌生,所以請爲像我這樣的初學者提供解釋。非常感謝!

這是下面提到的表格。

+-------------+-------+----------+-----------+-----------+ 
    | Location ID | Date | Money IN | Money Out | Total Sum | 
    +-------------+-------+----------+-----------+-----------+ 
    |   1 | date |  300 |  200 |   | 
    |   1 | date |  300 |  200 |   | 
    |   1 | date |  300 |  200 |   | 
    |   1 | total |  900 |  600 |  300 | 
    +-------------+-------+----------+-----------+-----------+ 
+0

所以你想看到270,50和220?或只是220?或者是什麼?以網格格式顯示樣本數據和預期結果。 (在Excel中模擬它,然後使用https://ozh.github.io/ascii-tables/將其轉換爲ascii表格並將其粘貼到格式爲代碼的問題中)。一個好的ascii圖片值1000字! – xQbert

回答

0

下應該給你你想要的東西:

SELECT DateOf, MoneyIn, MoneyOut, '' AS TotalSum FROM YourTable 
UNION 
SELECT 'Total', SUM(MoneyIn) AS SumIn, SUM(MoneyOut) AS SumOut, 
SUM(MoneyIn - MoneyOut) AS TotalSum FROM YourTable 

編輯:

你並不需要改變非常多,以達到你想要的東西。爲了在運行查詢時使Access訪問提示參數,請爲方括號中的參數指定一個名稱; Access將彈出一個窗口,提示用戶輸入該值。此外,此參數可以在查詢中多次使用,無需多次提示Access。所以下面的內容應該適用於你:

SELECT DateOf, MoneyIn, MoneyOut, '' AS TotalSum 
FROM YourTable 
WHERE LocationID=[Location ID] 
UNION 
SELECT 'Total', SUM(MoneyIn) AS SumIn, SUM(MoneyOut) AS SumOut, 
SUM(MoneyIn - MoneyOut) AS TotalSum FROM YourTable 
WHERE LocationID=[Location ID]; 

然而,看着你的餐桌設計,我強烈建議你改變它。您在每個記錄中都包含地址。如果您有三個地點,但有100個記錄,那麼平均而言,您不必要地重複每個地址超過30次。避免這種情況的「正常」方法是獲得第二個表格「位置」,它將具有一個ID和一個地址字段。然後,從YourTable中刪除地址,然後在位置中創建位置中的ID與YourTable中的LocationID之間的一對多關係。

+0

當我運行代碼時,我所瞭解的是,它正在從我的表中獲取所有信息,然後根據需要將其全部添加。但是,有一個小問題,它只能從每個(Money In和Money Out)中獲取一個輸入。例如,如果我有很多交易,我將如何修改它以接受表中的許多不同值?另外,如果我想限制某個位置的結果(來自多個位置的許多事務),我會使用WHERE((([yourtable]。[LocationID])= [Insert LocationID])); ?感謝您的建議! – pigeonfizz

+0

爲了幫助您更多,我需要表格結構,一些示例數據和示例數據,您希望結果如何。大多數事情都是可能的,我們只需要一個提示!如果你可以提供這些,我會在早上做些什麼 - 現在已經是晚上10點了 –

+0

我已經更新了上面的帖子,並附上了我從中獲取信息的表格,樣本數據和結果。我會期待你的回答!感謝你的幫助! – pigeonfizz

0

這是一個有點不清楚你期望不樣本數據到底是什麼,但我認爲這是你想要什麼:

SELECT DateOf, SUM(MoneyIN) - SUM(MoneyOut) 
FROM YourTable 
GROUP BY DateOf 

這將在每一個不同的DateOf

減去合計共 MoneyOutMoneyIn

更新回答

UNION會讓你追加一個「彙總」記錄到結果集的底部:

SELECT * 
FROM (
     SELECT CAST(DateOf as varchar(20)) as DateOf, MoneyIn, MoneyOut, '' as NetMoneyIn 
     FROM YourTable 
     UNION 
     SELECT 'Total:', SUM(MoneyIn), SUM(MoneyOut), SUM(MoneyIN) - SUM(MoneyOut) 
     FROM YourTable 
    ) A 
ORDER BY CASE WHEN DateOf <> 'Total:' THEN 0 ELSE 1 END, DateOf 

的一些注意事項。我使用了派生表,以確保「合計」記錄是最後一次。還將DateOf轉換爲字符串(假設它是date),否則在向該列寫入字符串「Total:」時會出現問題。

+0

事情是我不希望它在每個日期減去。我想整個專欄的總和。然後我想在一個查詢中減去它。我在xQbert指出的上面添加了一些示例數據。這是我已經嘗試的方法(我應該指定)。感謝您的快速反饋! – pigeonfizz