首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL中使用带有多个条件的嵌套案例

如何在SQL中使用带有多个条件的嵌套案例
EN

Stack Overflow用户
提问于 2018-11-11 08:51:21
回答 3查看 53关注 0票数 1

如何修改下面的sql脚本以计算以下条件

  • 如果LPO为空,则在2018年1月至2018年3月31日至3月31日期间,Total_Inc_Tax为qty x unit_price,Issue_date为5%。
  • 在31-2018年3月-2018年3月-2018年,当LPO非空不应该添加5%与qty x unit_price,其他明智的添加5%。 它是如何与嵌套案例一起工作的,或者建议其他方法。

My_Table:

代码语言:javascript
复制
+------------+-----+------------+---------------+
| Issue_date | qty | unit_price |      LPO      |
+------------+-----+------------+---------------+
| 10-Jan-18  |   1 |         42 | 1-2018-001166 |
| 12-Jan-18  |   1 |        100 | NULL          |
| 20-Sep-18  |   1 |         25 | NULL          |
| 15-Oct-18  |   2 |         12 | 1-2018-002233 |
| 20-Oct-18  |   1 |        100 | 1-2018-002233 |
+------------+-----+------------+---------------+

SELECT Qty,unit_price,LPO,
    case
    when issue_date <= '2018-03-31'  and issue_date >= '2018-01-01'  
    then (((qty) *(unit_price))  * 1.05 )      
    else    
    (((qty) *(unit_price))  * 1.05 )
    end   as Tot_inc_Tax
    from  My_Table 

预期结果

代码语言:javascript
复制
+------------+-----+------------+---------------+---------------+
| Issue_date | qty | unit_price |      LPO      | Total_Inc_Tax |
+------------+-----+------------+---------------+---------------+
| 10-Jan-18  |   1 |         42 | 1-2018-001166 |          44.1 |
| 12-Jan-18  |   1 |        100 | NULL          |           105 |
| 20-Sep-18  |   1 |         25 | NULL          |         26.25 |
| 15-Oct-18  |   2 |         12 | 1-2018-002233 |            24 |
| 20-Oct-18  |   1 |        100 | 1-2018-002233 |           100 |
+------------+-----+------------+---------------+---------------+
EN

回答 3

Stack Overflow用户

发布于 2018-11-11 09:02:27

根据你的逻辑,你可以试试这个

  1. 第一个使用OR
  2. 第二种使用AND

确保一切都符合你的逻辑。

代码语言:javascript
复制
SELECT Issue_date,Qty,unit_price,LPO,
    case
    when (issue_date BETWEEN '2018-01-01' AND '2018-06-30') OR unit_price IS NULL 
      THEN qty *LPO  * 1.05       
    when issue_date > '2018-03-31' AND unit_price IS NOT NULL 
      THEN qty * LPO  END 'Total_Inc_Tax'
from  My_Table 

木琴

票数 1
EN

Stack Overflow用户

发布于 2018-11-11 09:28:10

一种计算方法是:

代码语言:javascript
复制
with my_table(Issue_date, qty, unit_price, LPO) as  
(
 select '2018-01-10',1,42 ,'1-2018-001166' union all
 select '2018-01-12',1,100,NULL            union all
 select '2018-09-20',1,25 ,NULL            union all
 select '2018-10-15',2,12 ,'1-2018-002233' union all
 select '2018-10-20',1,100,'1-2018-002233'     
)
select Qty,unit_price,LPO,
       (case
          when issue_date between '2018-01-01' and '2018-03-31'  
            then (((qty) *(unit_price))  * 1.05 )      
          when issue_date > '2018-03-31' then
          ( case when lpo is null then
                 (((qty) *(unit_price))  * 1.05 )
            else
                 (((qty) *(unit_price))) 
            end )
        end ) as Tot_inc_Tax
  from  My_Table;

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=fa0467285b71ec2fddbc022022f4c720

票数 1
EN

Stack Overflow用户

发布于 2018-11-11 12:23:16

你可以用这个:

代码语言:javascript
复制
SELECT Qty,unit_price,LPO,
case
when issue_date between '2018-01-01' and '2018-03-31'  
then (((qty) *(unit_price))  * 1.05 )      
else   when  issue_date > '2018-03-31' and LPO is null
(((qty) *(unit_price))  * 1.05 )
end   as Tot_inc_Tax
from  My_Table 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53247158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档