【发布时间】: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 实际上应用程序每天都在运行查询,字段名称已在需求中定义