我有一张像这样的桌子:
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
如果您希望该列实际构成表的一部分,最好的办法是使其成为计算列。这会阻止它与行的其余部分不同步,同时仍然允许您将其视为 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)
另一种方式
SELECT *,
(SELECT SUM(C)
FROM (VALUES(col1),
(col2),
(col3)) V(C)) AS [Total]
FROM YourTable