在不同情况下,SQL语句的乘积要多

问题描述 投票:0回答:1

嗨,我有以下代码,如果您在下面看到A.PP数量的总和,我会提及> = 2和> = 5如果大于2,则必须乘以1000,大于15则等于1500

select *,
case 


     when b.SCode = 0202 and b.Itcoded = '37.01.123.0001'
     and b.MONTHOFDISC = 'march'  then
    case
        when sum(case when b.SCode = 0202 and b.Itcoded = '37.01.123.0001' and b.MONTHOFDISC = 'march'
        then b.appqty end) over()   >= 2  then (b.AppQty * 1000)
    end

    when b.SCode = 0202 and b.Itcoded = '37.01.123.0001'
     and b.MONTHOFDISC = 'march'  then
    case
        when sum(case when b.SCode = 0202 and b.Itcoded = '37.01.123.0001' and b.MONTHOFDISC = 'march'
        then b.appqty end) over()   >= 5  then (b.AppQty * 1500)
    end

      end     DiscAmount

我想将b.appqty的值相乘,但它仅与1000相乘,请提供帮助,这在1500的乘法中不起作用

sql sql-server-2008-r2
1个回答
2
投票

我认为这可以满足您的要求:

(case when b.SCode = 0202 and b.Itcoded = '37.01.123.0001' and b.MONTHOFDISC = 'march'  
      then (case when sum(case when b.SCode = 0202 and b.Itcoded = '37.01.123.0001' and b.MONTHOFDISC = 'march' then b.appqty end) over () >= 5
                 then (b.AppQty * 1500)
                 when sum(case when b.SCode = 0202 and b.Itcoded = '37.01.123.0001' and b.MONTHOFDISC = 'march' then b.appqty end) over () >= 2
                 then (b.AppQty * 1000)
            end)
 end) as DiscAmount

您的版本比必要版本复杂得多。但是原因是因为大于5的值也大于2,所以第一个条件始终匹配。关键是要逆转条件以避免此问题。

© www.soinside.com 2019 - 2024. All rights reserved.