【发布时间】:2013-01-30 10:19:33
【问题描述】:
我需要获取同一行中两个字段的总数,然后在同一行末尾的字段中输入该数字。
这是我的代码。
Sum(tbl1.fld1 + tbl1.fld2) AS [Total]
这是 SUM 函数的用途,还是只能使用 SUM 函数来获取列的总数?
谢谢
【问题讨论】:
我需要获取同一行中两个字段的总数,然后在同一行末尾的字段中输入该数字。
这是我的代码。
Sum(tbl1.fld1 + tbl1.fld2) AS [Total]
这是 SUM 函数的用途,还是只能使用 SUM 函数来获取列的总数?
谢谢
【问题讨论】:
只是一个关于添加列的提醒。如果其中一个值为 NULL,则这些列的总数变为 NULL。因此,为什么有些发帖人建议用第二个参数为 0 来合并
我知道这是一篇较旧的帖子,但为了完整起见,我想添加它。
【讨论】:
SUM 是一个聚合函数。它将计算每个组的总数。 + 用于连续计算两列或多列。
考虑这个例子,
ID VALUE1 VALUE2
===================
1 1 2
1 2 2
2 3 4
2 4 5
SELECT ID, SUM(VALUE1), SUM(VALUE2)
FROM tableName
GROUP BY ID
结果
ID, SUM(VALUE1), SUM(VALUE2)
1 3 4
2 7 9
SELECT ID, VALUE1 + VALUE2
FROM TableName
结果
ID, VALUE1 + VALUE2
1 3
1 4
2 7
2 9
SELECT ID, SUM(VALUE1 + VALUE2)
FROM tableName
GROUP BY ID
结果
ID, SUM(VALUE1 + VALUE2)
1 7
2 16
【讨论】:
由于我的声望点低于 50,我无法评论或投票支持 E Coder 的上述回答。这是最好的方法,因此您不必使用 group by,因为我遇到了类似的问题。
通过将SUM((coalesce(VALUE1 ,0)) + (coalesce(VALUE2 ,0))) 设置为 Total,这将为您提供所需的数字,但也可以消除因未执行 Group By 的任何错误。
这是我的查询,给了我每个经销商的总数和总金额,然后给了我质量和风险经销商贷款的小计。
SELECT
DISTINCT STEP1.DEALER_NBR
,COUNT(*) AS DLR_TOT_CNT
,SUM((COALESCE(DLR_QLTY,0))+(COALESCE(DLR_RISKY,0))) AS DLR_TOT_AMT
,COUNT(STEP1.DLR_QLTY) AS DLR_QLTY_CNT
,SUM(STEP1.DLR_QLTY) AS DLR_QLTY_AMT
,COUNT(STEP1.DLR_RISKY) AS DLR_RISKY_CNT
,SUM(STEP1.DLR_RISKY) AS DLR_RISKY_AMT
FROM STEP1
WHERE DLR_QLTY IS NOT NULL OR DLR_RISKY IS NOT NULL
GROUP BY STEP1.DEALER_NBR
【讨论】:
ID VALUE1 VALUE2
===================
1 1 2
1 2 2
2 3 4
2 4 5
select ID, (coalesce(VALUE1 ,0) + coalesce(VALUE2 ,0) as Total from TableName
【讨论】:
如果您想将两列添加在一起,您所要做的就是添加它们。然后,您将获得查询返回的每一行的这两列的总和。
您的代码正在做的是将两列相加,然后得到总和的总和。这会起作用,但它可能不是你想要完成的。
【讨论】:
sum 函数只获取一列的总数。为了对来自不同列的两个值求和,请将值转换为 int 并使用 +-Operator 将它们相加
Select (convert(int, col1)+convert(int, col2)) as summed from tbl1
希望对您有所帮助。
【讨论】:
尝试以下方法:
SELECT *, (FieldA + FieldB) AS Sum
FROM Table
【讨论】:
SUM 用于对多行的列中的值求和。您可以将列添加在一起:
select tblExportVertexCompliance.TotalDaysOnIncivek + tblExportVertexCompliance.IncivekDaysOtherSource AS [Total Days on Incivek]
【讨论】: