2016-01-21 84 views
0

是否有可能获得每行所有行的总和。示例获取每行所有行的总和

Rows | TotalCount 
    1 | 20 
    2 | 30 
    3 | 10 
    4 | 60 

现在,我想得到以下结果。

Rows | TotalCount 
     1 | 120 
     2 | 120 
     3 | 120 
     4 | 120 

如果有可能在SQL服务器上请帮忙。

+0

欢迎来到Stack Overflow!你似乎在要求某人为你写一些代码。堆栈溢出是一个问答网站,而不是代码写入服务。请[see here](http://stackoverflow.com/help/how-to-ask)学习如何编写有效的问题。 – Quotidian

回答

3

使用子查询,你做SUM工作:

select rows, (select sum(TotalCount) from tablename) as TotalCount 
from tablename 

还是一个cross join

select t1.rows, t2.TotalCount 
from tablename t1 
    cross join (select sum(TotalCount) as TotalCount from tablename) t2 
+0

你知道吗,如果这些查询是等效的,db做优化?对我来说,第一个看起来像必须为每一行执行子查询,所以第二个应该会更好。 –

+0

好吧,我只是做了测试。 http://www.sqlfiddle.com/#!15/2e2fe/2即使当计划中的步骤是不同的顺序看起来像成本是相同的 –

+0

@JuanCarlosOropeza,因为子查询是不相关的,我想它只执行一次 - 在这两种情况下。 – jarlh

0

尝试这样,

DECLARE @table TABLE 
    (
    Rows  INT, 
    TotalCount INT 
) 

INSERT INTO @table 
VALUES  (1, 
      20), 
      (2, 
      30), 
      (3, 
      10), 
      (4, 
      60) 

DECLARE @total INT=(SELECT Sum(totalcount) 
    FROM @table) 

SELECT rows, 
     @total AS TotalCount 
FROM @table 
4

使用窗口功能:

select t.*, sum(totalcount) over() 
from t; 

通常,窗口函数将比join /聚合解决方案更快。这是一个相当简单的情况,所以表现可能基本相同。

+0

执行计划表明,这比jarlh,+1的解决方案略高效。 – InbetweenWeekends