2017-08-23 110 views
1

我有這樣的腳本:和兩列總計然後減去兩個總和在一起

SELECT 

    ISNULL([name], 'Total') AS [name] 
, [Yesterday] 
, [Today] 
, [variance] 

FROM 
(
    SELECT 
[name], 
SUM([yesterday]) AS [yesterday], 
SUM([today]) AS [today], 
sum(variance) as Variance 

    FROM mytable 
     GROUP BY [name] WITH ROLLUP 
) AS DT 

它返回此表:

name |yesterday|today|variance 
john | 3  |4 | 0.33 
smith | 4  |5 |0.25 
daniel| 5  |2 |-0.6 
total | 12  |11 |-0.02 

在總方差實際上應該是:(11-12 )/ 12 = -0.833

如何讓我的腳本產生的結果而不是總數的差異列?

預計將是數據:

name |yesterday|today|variance 
john | 3  |4 | 0.33 
smith | 4  |5 |0.25 
daniel| 5  |2 |-0.6 
total | 12  |11 |-0.833 
+0

你能提供的數據,在其上期待定勝負? – gotqn

+0

我已更新。一切基本上保持不變,但需要正確計算一個數字。 – VS1SQL

回答

0

你試試這個?:

SELECT 

    ISNULL([name], 'Total') AS [name] 
, [Yesterday] 
, [Today] 
, [variance] 

FROM 
(
    SELECT 
[name], 
SUM([yesterday]) AS [yesterday], 
SUM([today]) AS [today], 
((SUM([today]) -SUM([yesterday]))/SUM([yesterday])) as Variance 

    FROM mytable 
     GROUP BY [name] WITH ROLLUP 
) AS DT 
+0

否,因爲它只會計算兩列上的行,而不是返回查詢底部的實際總數...... – VS1SQL