带有SUM的CASE语句

3
这是我的表结构。
===================================
main_section | currency | amount
===================================

Tender           INR        2000
Bank             USD        3000
Tender           INR        1500
Tender           INR        1850
===================================

我正在尝试编写一个CASE语句,如果'main_section=tender',则应返回投标金额;如果是银行,则应返回银行金额。如果有多条记录,则应将它们相加并返回总额(这里Tender有多条记录)。有人能帮我吗?以下是我尝试的CASE语句:
CASE sum(com_payments.main_section 
         WHEN com_payments.main_section = 'Tender' 
         THEN main_tender = com_payments.amount
END AS maintender1)
CASE sum(com_payments.main_section 
         WHEN com_payments.main_section = 'Bank' 
         THEN main_bank = com_payments.amount
END AS mainbank1)

2
语法不正确,应该是 sum(case when main_section = 'Tender' then amount else 0 end) as maintender1,............... 如果你只有两个 main_section,为什么不使用 select main_section,sum(amount) as amount group by main_section 呢? - Abhik Chakraborty
1个回答

9

您需要进行条件聚合:

SELECT SUM(CASE WHEN main_section = 'Tender' THEN amount END) AS maintender1,
       SUM(CASE WHEN main_section = 'Bank' THEN amount END) AS mainbank1      
FROM mytable

它正常工作。我能否在这里添加货币?目前只显示金额。我需要获取货币信息。我是否需要为货币单独提供CASE语句?例如...SELECT SUM(CASE WHEN main_section = 'Tender' THEN amount,currency END) AS maintender1, - Sanju Menon
这是否可能,还是我需要添加一个单独的CASE语句来实现相同的功能? - Sanju Menon
@SanjuMenon 你需要两个单独的CASE表达式,一个用于INR,另一个用于USD - Giorgos Betsos
那么,如果主要部分为“招标”,则CASE语句应显示金额和货币。目前只显示金额。 - Sanju Menon
@SanjuMenon CASE是一个表达式而不是语句。它总是返回一个单一的标量值。你不能使用它来返回两个独立的值。 - Giorgos Betsos
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接