【问题标题】:sum two columns as totals then minus the two totals together将两列作为总数相加,然后将两个总数减去
【发布时间】:2018-01-31 20:16:23
【问题描述】:

我有这个脚本:

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

【问题讨论】:

  • 您能否提供您期望给定结果的数据?
  • 我已经更新了。一切基本保持不变,但需要正确计算一个数字。

标签: sql sql-server sum variance rollup


【解决方案1】:

你试过了吗?:

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

【讨论】:

  • 否,因为这将仅计算两列上的行,而不是返回查询底部的实际总数...
猜你喜欢
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2018-05-05
相关资源
最近更新 更多