0

我有一张像这样的桌子:

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

为此,在整个总列中最快的是什么?

4

2 回答 2

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

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

将执行此操作的创建表语句:

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)
于 2012-05-24T09:09:12.497 回答
3

另一种方式

SELECT *, 
       (SELECT SUM(C) 
        FROM   (VALUES(col1), 
                      (col2), 
                      (col3)) V(C)) AS [Total] 
FROM   YourTable 
于 2012-05-24T09:12:13.617 回答