【问题标题】:How to sum across multiple rows for multiple fields如何对多个字段的多行求和
【发布时间】:2013-07-11 18:42:07
【问题描述】:

任何人都可以建议如何编写 SQL 查询以按组包含跨多行的多个字段的总和。我正在使用以下查询,但它一直说“选择行中的字段无效,因为它既不包含在聚合函数或 GROUP BY 子句中。”

    Select ClaimId,InternalICN,BilledAmt, 
           Sum(PayAmt) as TotPayAmt,Sum(COBAmt) as TotCOBAmt,Sum(PrePayAmt) as  
           TotPrePayAmt 
    from CAIDEnc.IntEncTracking.EncounterList
    where BypassFlag = 0 and
     BypassReason = 0
    group by ClaimId, InternalICN

任何建议将不胜感激。谢谢!

【问题讨论】:

  • 唯一有问题的字段是 BilledAmt。这应该是什么?
  • 谢谢,斯帕基。我意识到 BilledAmt 应该包含一个聚合函数,或者它需要包含在 Group by 子句中。

标签: sql group-by sum


【解决方案1】:

根据你真正想要的,你有两种选择:

选项 #1:从 SELECT 中删除 BilledAmt

Select ClaimId,InternalICN, 
           Sum(PayAmt) as TotPayAmt,Sum(COBAmt) as TotCOBAmt,Sum(PrePayAmt) as  
           TotPrePayAmt 
    from CAIDEnc.IntEncTracking.EncounterList
    where BypassFlag = 0 and
     BypassReason = 0
    group by ClaimId, InternalICN

选项 #2:在 GROUP BY 中包含 BilledAmt

Select ClaimId,InternalICN,BilledAmt, 
           Sum(PayAmt) as TotPayAmt,Sum(COBAmt) as TotCOBAmt,Sum(PrePayAmt) as  
           TotPrePayAmt 
    from CAIDEnc.IntEncTracking.EncounterList
    where BypassFlag = 0 and
     BypassReason = 0
    group by ClaimId, InternalICN,BilledAmt

【讨论】:

  • 谢谢,这成功了。所以像这样的 Select 语句中不能包含任何字段,除非它前面有一个聚合函数,或者在 Group By 子句中?
【解决方案2】:

BilledAmt 不在 group by 子句中。你必须把它放在那里,或者用总和、平均值或其他函数聚合它。

【讨论】:

    【解决方案3】:

    BilledAmt 不在聚合查询中。当您使用 group by 时,您只能选择聚合或 group by 子句中的任何字段/

    【讨论】:

    • 澄清您不能选择 BilledAmt 的原因是因为当您按聚合分组时,每个组中可能有多个 BilledAmt 值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    相关资源
    最近更新 更多