【问题标题】:SQL SUM and CASESQL SUM 和 CASE
【发布时间】:2014-05-09 02:09:45
【问题描述】:

我有一个 LineItem 表。

InvoiceNo   ApplyTax(bool)   Subtotal  
1              1                10
1              0                10  
1              1                10 
2              0                10
2              1                10

应用税意味着在小计中再增加 7%

我需要一个返回的选择语句。

InvoiceNo     Total
1              31.4 ----(10* 1.07 + 10 + 10*1.07)
2              20.7 ----(  10* 1.07 + 10) 

我可以想出这个,但它给出了语法错误。

SELECT InvoiceNo ,SUM(( select case(ApplyTax) WHEN 1 THEN 1.07 ELSE 1)*subtotal) 
From InvoiceTable
Group By InvoiceNo 

我错过了一些非常简单的东西吗?我做错了。

【问题讨论】:

  • 无论如何,你为什么不只是 * 1.07,因为 0 * 1.07 = 0。所以最终你仍然得到 0。为什么要为“案例”浪费额外的处理。
  • 案例 1 = 真,案例 0 = 假。如果为真,你就申请税,如果它是假的,你不申请。它要么是 * 1.07 要么是 * 1,而不是相反。 @天空

标签: sql sum case


【解决方案1】:

下面是正确的语法:

SELECT InvoiceNo, SUM((case ApplyTax WHEN 1 THEN 1.07 ELSE 1 end)*subtotal) 
From InvoiceTable
Group By InvoiceNo ;

注意没有嵌套的select 语句,caseend 结尾。

【讨论】:

  • 好的,发现答案读错了,我很傻。 weblogs.asp.net/wilczynski/archive/2008/06/03/… Select InvoiceNo ,SUM(case When ApplyTax = '1' THEN 1.07 *subtotal ELSE subtotal END) From InvoiceTable Group By InvoiceNo
  • 是的!谢谢。我一直在看。有效。谢谢!
【解决方案2】:

END 放在CASE 语句的末尾..

SELECT inv ,SUM(( select case(ApplyTax) WHEN 1 THEN 1.07 ELSE 1 END)*subtotal) as total
From test 
Group By inv 

【讨论】:

    猜你喜欢
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多