【问题标题】:SUM in case expression SQL Server案例表达式 SQL Server 中的 SUM
【发布时间】:2020-04-06 09:02:28
【问题描述】:

我正在处理这个查询:

SELECT
       [D_INV_DATE_ID]
      ,[INVOICE_NO]
      ,[CUSTOMER_ID]
      ,[DOCUMENT_STATUS]
      ,[Total_Charge]
      ,[OPEN_CHARGE]
      ,[DSS_UPDATE_TIME]
      ,Case 
         when Total_Charge < 20 then 'less than 20'
         when Total_Charge > 20 and Total_Charge <= 50 then '20-50'
         when Total_Charge > 50 and Total_Charge <= 100 then '50-100'
         when Total_Charge > 100 then '100+'
      End as SortedBySum
  FROM [TEST].[angel].[inv3]

我需要按组对所有 when 语句进行求和,因此第一个语句必须是所有小于 20 的总和才能相加。

【问题讨论】:

    标签: sql-server sum case


    【解决方案1】:

    如果我猜对了,我认为以下逻辑会有所帮助-

    SELECT 
    [D_INV_DATE_ID],[INVOICE_NO],[CUSTOMER_ID],[DOCUMENT_STATUS],[Total_Charge],
    [OPEN_CHARGE],[DSS_UPDATE_TIME],
    SUM(CASE WHEN Total_Charge <= 20 THEN Total_Charge ELSE 0 END) [sum_below_equal_20],
    SUM(CASE WHEN Total_Charge > 20 and Total_Charge <= 50 THEN Total_Charge ELSE 0 END) [sum_above_20_below_50],
    SUM(CASE WHEN Total_Charge > 50 and Total_Charge <= 100 THEN Total_Charge ELSE 0 END) [sum_above_50_below_100],
    SUM(CASE WHEN Total_Charge > 100 THEN Total_Charge ELSE 0 END) [sum_100_above]
    FROM [TEST].[angel].[inv3]
    GROUP BY
    [D_INV_DATE_ID],[INVOICE_NO],[CUSTOMER_ID],[DOCUMENT_STATUS],[Total_Charge],
    [OPEN_CHARGE],[DSS_UPDATE_TIME]
    

    【讨论】:

    • 请立即查看@RinganarR
    • 它现在可以工作了,但结果不是我需要的,所以我会试着解释一下,这样你就可以弄清楚了,因为我卡在 atm 上,基本上我们需要对所有值求和进入每种情况,atm 它对每一行的值求和,我们需要对所有将进入
    • 您能否添加一些示例数据以及您的预期输出?
    • 好的,例如我们在
    • 如果没有在 select 和 group by 中列出的项目,它会给出正确的结果,因为它仍然是每个 ID 而不是总和。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2020-05-17
    • 1970-01-01
    • 2017-03-21
    相关资源
    最近更新 更多