2016-01-21 101 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