如何在SQL查询中SUM两个字段

Ant*_*hes 72 sql ms-access

我需要得到同一行内的两个字段的总和,并在该行的末尾的字段中输入该数字.

这是我的代码.

Sum(tbl1.fld1 + tbl1.fld2) AS [Total]
Run Code Online (Sandbox Code Playgroud)

这是SUM函数的用途,还是只能使用SUM函数获取列的总数?

谢谢

Joh*_*Woo 163

SUM是一个聚合函数.它将计算每个组的总数.+用于计算一行中的两列或更多列.

考虑这个例子,

ID  VALUE1  VALUE2
===================
1   1       2
1   2       2
2   3       4
2   4       5
Run Code Online (Sandbox Code Playgroud)

 

SELECT  ID, SUM(VALUE1), SUM(VALUE2)
FROM    tableName
GROUP   BY ID
Run Code Online (Sandbox Code Playgroud)

将导致

ID, SUM(VALUE1), SUM(VALUE2)
1   3           4
2   7           9
Run Code Online (Sandbox Code Playgroud)

 

SELECT  ID, VALUE1 + VALUE2
FROM    TableName
Run Code Online (Sandbox Code Playgroud)

将导致

ID, VALUE1 + VALUE2
1   3
1   4
2   7
2   9
Run Code Online (Sandbox Code Playgroud)

 

SELECT  ID, SUM(VALUE1 + VALUE2)
FROM    tableName
GROUP   BY ID
Run Code Online (Sandbox Code Playgroud)

将导致

ID, SUM(VALUE1 + VALUE2)
1   7
2   16
Run Code Online (Sandbox Code Playgroud)

  • 这个答案并不复杂,但很简单,并且根据需要详细说明.好的! (8认同)
  • 感谢约翰,可能是回答这个问题的最佳方式! (2认同)

Obl*_*obl 27

请尝试以下方法:

SELECT *, (FieldA + FieldB) AS Sum
FROM Table
Run Code Online (Sandbox Code Playgroud)


小智 8

只是关于添加列的提醒。如果其中一个值为 NULL,则这些列的总数将变为 NULL。因此为什么有些发帖人建议将第二个参数设为 0 进行合并

我知道这是一个较旧的帖子,但为了完整起见,我想添加它。

  • 谢谢 Barb,除了合并之外,还可以使用 ISNULL。例如,ISNULL((value_1),0) + ISNULL((value_2),0) (2认同)

Dan*_*ley 7

SUM用于对多行中的值求和.您可以将列添加到一起:

select tblExportVertexCompliance.TotalDaysOnIncivek + tblExportVertexCompliance.IncivekDaysOtherSource AS [Total Days on Incivek]
Run Code Online (Sandbox Code Playgroud)


E C*_*der 6

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
Run Code Online (Sandbox Code Playgroud)


小智 5

由于我的声誉点低于 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
Run Code Online (Sandbox Code Playgroud)