是否有可能獲得每行所有行的總和。示例獲取每行所有行的總和
Rows | TotalCount
1 | 20
2 | 30
3 | 10
4 | 60
現在,我想得到以下結果。
Rows | TotalCount
1 | 120
2 | 120
3 | 120
4 | 120
如果有可能在SQL服務器上請幫忙。
是否有可能獲得每行所有行的總和。示例獲取每行所有行的總和
Rows | TotalCount
1 | 20
2 | 30
3 | 10
4 | 60
現在,我想得到以下結果。
Rows | TotalCount
1 | 120
2 | 120
3 | 120
4 | 120
如果有可能在SQL服務器上請幫忙。
使用子查詢,你做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
你知道嗎,如果這些查詢是等效的,db做優化?對我來說,第一個看起來像必須爲每一行執行子查詢,所以第二個應該會更好。 –
好吧,我只是做了測試。 http://www.sqlfiddle.com/#!15/2e2fe/2即使當計劃中的步驟是不同的順序看起來像成本是相同的 –
@JuanCarlosOropeza,因爲子查詢是不相關的,我想它只執行一次 - 在這兩種情況下。 – jarlh
嘗試這樣,
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
使用窗口功能:
select t.*, sum(totalcount) over()
from t;
通常,窗口函數將比join
/聚合解決方案更快。這是一個相當簡單的情況,所以表現可能基本相同。
執行計劃表明,這比jarlh,+1的解決方案略高效。 – InbetweenWeekends
歡迎來到Stack Overflow!你似乎在要求某人爲你寫一些代碼。堆棧溢出是一個問答網站,而不是代碼寫入服務。請[see here](http://stackoverflow.com/help/how-to-ask)學習如何編寫有效的問題。 – Quotidian