我在同一个表中有几列的数据:
Col1 Col2 Col3 Col4 Col5 Col6
我想从表中检索从 Col1 到 Col3、从 Col3 到 Col6 或从 Col1 到 Col6 的总和,但是我不知道如何选择这些特定列。
我在同一个表中有几列的数据:
Col1 Col2 Col3 Col4 Col5 Col6
我想从表中检索从 Col1 到 Col3、从 Col3 到 Col6 或从 Col1 到 Col6 的总和,但是我不知道如何选择这些特定列。
您可以创建一个视图:
CREATE VIEW dbo.col_sums_from_some_table
AS
SELECT
[Col1-3] = Col1 + Col2 + Col3,
[Col3-6] = Col3 + Col4 + Col5 + Col6,
[Col1-6] = Col1 + Col2 + Col3 + Col4 + Col5 + Col6
FROM dbo.table_name;
(如果这些列可以为空,您需要用COALESCE
@davek 指出的那样包装它们。)
然后您可以直接选择您要查找的列或应用 SUM():
SELECT [Col1-3] FROM dbo.col_sums_from_some_table;
SELECT SUM([Col1-6] FROM dbo.col_sums_from_some_table;
您还可以在表上创建计算列,例如(我在这里猜测数据类型):
ALTER TABLE dbo.table_name ADD [Col1-3]
AS CONVERT(INT, COALESCE(Col1, 0) + COALESCE(Col2, 0) + COALESCE(Col3, 0));
您也可以选择对这些计算列进行持久化/索引。
对于单行:
select col1 + col2 + col3 from mytable
(假设所有列都是数字)
对特定列的所有值求和:
declare @sum int
set @sum = 0
select @sum = @sum + col1 from mytable
对所有行求和,例如第 1 列和第 2 列:
declare @sum int
set @sum = 0
select @sum = @sum + col1 + col2 from mytable
为了有效地处理空值,您可以使用 coalesce 函数:
declare @sum int
set @sum = 0
select @sum = @sum + coalesce(col1, 0) + coalesce(col2, 0) from mytable