2016-01-21 91 views
1

我試圖從昨天的總計中扣除今天的總計 - 這些總計保存在不同的行中,但我似乎無法將總和減去以查看區別。這裏是我迄今爲止在我的表:SQL Server:僅減去基於另一列的特定總和

有兩個(2)列:

  • 來源nchar(45)
  • 金額decimal(19,3)

到目前爲止,我已經嘗試:

select 
( 
    select amount as TotalToday 
    from tblDailySalesvyest 
    where Source = 'grand total yest' 
) , 
(
    select amount as TotalYest 
    from tblDailySalesvyest 
    where Source = 'grand total today' 
) 
from tblDailySalesvYest 

但是我得到的行數與列數一樣多。 如何分離每個總數並從另一箇中減去一個總數?

Source           Amount 
Invoiced Today         NULL 
Invoiced Yest         38009.320 
Credited Today         NULL 
Credited Yest         -579.920 
Open Orders Today        7913.040 
Open Orders Yest        17499.162 
Grand Total Yest        129300.562 
Grand Total Today        8650.010 
+0

我想你會需要一個_relation_之間的記錄將今天的總數與昨天的總數聯繫起來。我會建議改變你的模式。 –

+0

這是一個開始的好地方。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

回答

1

使用條件的總和

SELECT SUM(CASE WHEN Source = 'grand total yest' 
       THEN Amount 
       ELSE 0 
      END) as sum_yesterday, 
     SUM(CASE WHEN Source = 'grand total today' 
       THEN Amount 
       ELSE 0 
      END) as sum_today 
FROM tblDailySalesvYest 
+0

謝謝! SELECT SUM(CASE WHEN來源爲 '總計yest' THEN金額 ELSE 0 END)作爲sum_yesterday, SUM(CASE WHEN來源爲「總計當今 THEN金額 ELSE 0 END)作爲sum_today, SUM (CASE WHEN來源爲 '總計yest' THEN金額 ELSE 0 END) - SUM(CASE WHEN來源爲「總計當今 THEN金額 ELSE 0 END)作爲變化 FROM tblDailySalesvYest –

0

首先,你的源代碼混合使用嗎?當來源是「總計YEST」時,您將TotalToday引用爲TotalToday。

這就是說,如果這是你的意圖,這聽起來像笛卡爾產品不是一個問題。我不會使用CASE,因爲它往往比平面連接慢。你既可以在加入FROM或有兩個完全包含嵌套在整體選擇SELECT語句:

1.

SELECT 
    SUM(today.amount) AS TotalToday, 
    SUM(yest.amount) AS TotalYest 
FROM 
    tblDailySalesvYest AS today, 
    tblDailySalesvYest AS Yest 
WHERE 
    today.Source = 'grand total today' AND 
    yest.Source = 'grand total yest' 

2.

SELECT 
    (SELECT SUM(amount) FROM tblDailySalesvYest WHERE source = 'grand total today') AS TotalToday, 
    (SELECT SUM(amount) FROM tblDailySalesvYest WHERE source = 'grand total yest') AS TotalYest