在所有值我有這樣一個表:總結每一行
col1 col2 col3 total
3 5 6
7 8 null
...
我想總列COL1,COL2,COL3的每個的總和。所以在的情況下,總應該是:
col1 col2 col3 total
3 5 6 14
7 8 null 15
...
什麼是最快的,以彌補這整個總列?
在所有值我有這樣一個表:總結每一行
col1 col2 col3 total
3 5 6
7 8 null
...
我想總列COL1,COL2,COL3的每個的總和。所以在的情況下,總應該是:
col1 col2 col3 total
3 5 6 14
7 8 null 15
...
什麼是最快的,以彌補這整個總列?
select col1, col2, col3,
isnull(col1,0) + isnull(col2,0) + isnull(col3,0) as total
from tableName
如果您希望該列實際構成表格的一部分,那麼最好的方法是將其設置爲計算列。這會阻止它與行的其餘部分不同步,同時仍然允許您像選擇語句中的任何其他列那樣對待它。
CREATE TABLE語句,將做到這一點:
CREATE TABLE [dbo].[tableName](
[col1] [int] NULL,
[col2] [int] NULL,
[col3] [int] NULL,
[total] AS ((isnull([col1],0)+isnull([col2],0))+isnull([col3],0))
)
另外,在SSMS只是跳轉到你表設計,選擇total
列,表達isnull([col1],0)+isnull([col2],0))+isnull([col3],0)
粘貼到名爲computed column specification > formula
最後箱,如果你真的只想回填表中的總列(不要!這是一個壞主意。你的數據將稍後有人更新col1,2或3時不同步而忘記更新總數)只使用一個更新
UPDATE tableName
SET total = isnull([col1],0)+isnull([col2],0))+isnull([col3],0)
另一種方式
SELECT *,
(SELECT SUM(C)
FROM (VALUES(col1),
(col2),
(col3)) V(C)) AS [Total]
FROM YourTable
我相信這隻適用於SQL Server 2008或更高版本。 –
Ingenius,沒有看到這種問題的語法。是否有一個估計的子樹成本比我的例子高10倍......兩者都非常有效,但實際上是這樣。 – Jamiec
@DanielRenshaw - 是的。 'VALUES'構造函數是2008+。 2005年可能會使用'UNION ALL'或'UNPIVOT'。 –
謝謝this.Is能夠創建此表的物理列,並把結果從查詢中爲每個行? - – dublintech
@dublintech - 請參閱更新 – Jamiec