【问题标题】:Calculation in Sum Field in SQLSQL中求和字段中的计算
【发布时间】:2018-03-05 16:28:24
【问题描述】:

我有一个查询,它按付款方式向我返回一个总和

select
RTRIM(shopNo) as Shop_Number,
REPLACE(CONVERT(VARCHAR(10), DateTransaction, 103), '/', '') AS Todays_Date,
CodeModeDePaiement as Mode_Of_Payment,
SUM(convert(DOUBLE PRECISION,  Amount * 100 ) * 10) As Amount
from InvoiceSettlement
where  CodeModeDePaiement in 
(101,130,132,135,104,103,124,107,
136,117,131,410,106,122,109,102,105,112,133,999)
and   DateTransaction =  '2017/12/31' 
group by ShopNo,DateTransaction,CodeModeDePaiement

输出结果如下:

Shop_Number Todays_Date Mode_Of_Payment Amount
  2         31122017    102             18421610
  2         31122017    130             2332371390
  2         31122017    132             1082810
  2         31122017    106             66457640
  2         31122017    117             23925000
  2         31122017    133             5700000
  2         31122017    999             -490653940
  2         31122017    101             2404194870

我希望结果始终将 Mode_of_Payment(101 + 999) 的总金额显示为 101。我需要如下结果:

Shop_Number Todays_Date Mode_Of_Payment Amount
  2         31122017    102             18421610
  2         31122017    130             2332371390
  2         31122017    132             1082810
  2         31122017    106             66457640
  2         31122017    117             23925000
  2         31122017    133             5700000
  2         31122017    101             1913540930

【问题讨论】:

  • 你能再解释一下逻辑吗?您只想将 PaymentMode 999 添加到 101 吗?在这种情况下,您可以使用 case 表达式:CASE WHEN CodeModeDePaiement = 999 THEN 101 ELSE CodeModeDePaiement END as Mode_Of_Payment,与 group by 相同。
  • 小点子,为什么你在查询去年的数据的时候把DateTransaction别名为'Todays_Date'?
  • @PaulCampbell 实际上应用程序每天都在运行查询,字段名称已在需求中定义

标签: mysql sql


【解决方案1】:

使用 CASE 表达式将 101 和 999 映射到同一事物:

SELECT
    RTRIM(shopNo) AS Shop_Number,
    REPLACE(CONVERT(VARCHAR(10), DateTransaction, 103), '/', '') AS Todays_Date,
    CASE WHEN CodeModeDePaiement IN (101, 999)
         THEN 101
         ELSE CodeModeDePaiement END as Mode_Of_Payment,
    SUM(CONVERT(DOUBLE PRECISION,  Amount * 100 ) * 10) AS Amount
FROM InvoiceSettlement
WHERE CodeModeDePaiement IN (101, 130, 132, 135, 104, 103, 124, 107, 136, 117,
    131, 410, 106, 122, 109, 102, 105, 112, 133, 999) AND
    DateTransaction = '2017/12/31' 
GROUP BY
    ShopNo,
    DateTransaction,
    CASE WHEN CodeModeDePaiement IN (101, 999)
         THEN 101
         ELSE CodeModeDePaiement END;     

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2015-02-09
    相关资源
    最近更新 更多