首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL嵌套CASE语句

问SQL嵌套CASE语句
EN

Stack Overflow用户
提问于 2015-07-09 08:33:48
回答 2查看 162关注 0票数 2

我正在尝试更新销售分析多维数据集中的以下查询段。我对SQL不太熟悉。

第一个CASE语句的工作原理是--当OINV.Canceled = 'Y‘时返回一个负数。

代码语言:javascript
复制
CASE OINV.Canceled WHEN 'Y' THEN - INV1.LineTotal 
ELSE INV1.LineTotal END AS LineTotal, 
CASE INV1.StockSum WHEN 0 THEN INV1.LineTotal 
ELSE INV1.StockSum END AS SaleValue, INV1.GrssProfit

我试图实现的是,当SaleValue= 'Y‘时,第二个CASE语句也返回一个负值( OINV.Canceled )。我想我需要在这里嵌套一个案例陈述,但我不确定。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-09 08:38:27

有案例表达式的两种格式。简单的案例和搜索的案例。您可以使用已搜索的案例表达式来完成此操作。

代码语言:javascript
复制
CASE WHEN  OINV.Canceled = 'Y' THEN -INV1.StockSum 
     WHEN  INV1.StockSum = 0 THEN INV1.LineTotal
     ELSE  INV1.StockSum 
END AS SaleValue

或者可能是(取决于您的需求)

代码语言:javascript
复制
CASE WHEN  OINV.Canceled = 'Y' AND INV1.StockSum = 0 THEN -INV1.LineTotal
     WHEN  OINV.Canceled = 'Y' AND INV1.StockSum <> 0 THEN -INV1.StockSum 
     ELSE  INV1.StockSum 
END AS SaleValue

或者一个嵌套的案子。在这里,您必须对OINV.Canceled的不同值重复子case表达式。

代码语言:javascript
复制
 CASE OINV.Canceled WHEN 'Y' THEN
                    -1 * CASE INV1.StockSum WHEN 0 THEN INV1.LineTotal 
                         ELSE INV1.StockSum END
                    ELSE 
                         CASE INV1.StockSum WHEN 0 THEN INV1.LineTotal 
                         ELSE INV1.StockSum END
 END AS SaleValue
票数 4
EN

Stack Overflow用户

发布于 2015-07-09 08:38:22

试试这个:

代码语言:javascript
复制
CASE 
  When OINV.Canceled = 'Y' THEN  INV1.LineTotal *(-1)
  ELSE INV1.LineTotal 
END AS LineTotal, 
CASE 
  When INV1.StockSum = 0 THEN INV1.LineTotal 
  ELSE INV1.StockSum 
END AS SaleValue, 
INV1.GrssProfit
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31312214

复制
相关文章

相似问题

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