汇总每行中的所有值

时间:2012-05-24 09:07:11

标签: sql sql-server

我有一张表:

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
...

为此提高整个专栏的最快速度是什么?

2 个答案:

答案 0 :(得分:4)

select col1, col2, col3, 
       isnull(col1,0) + isnull(col2,0) + isnull(col3,0) as total
from tableName

如果您希望该列实际构成表格的一部分,最好的办法是将其作为计算列。这会阻止它与行的其余部分不同步,同时仍允许您像处理select语句中的任何其他列一样对待它。

将执行此操作的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)

答案 1 :(得分:2)

另一种方式

SELECT *, 
       (SELECT SUM(C) 
        FROM   (VALUES(col1), 
                      (col2), 
                      (col3)) V(C)) AS [Total] 
FROM   YourTable