我有一张表:
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
...
为此提高整个专栏的最快速度是什么?
答案 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