SQL嵌套CASE语句

时间:2015-07-09 08:33:48

标签: sql sql-server tsql

我正在尝试更新Sales Analysis多维数据集中的以下查询段。我对SQL并不十分熟悉。

第一个CASE语句按原样运行 - 当OINV.Canceled ='Y'时返回负数。

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

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

2 个答案:

答案 0 :(得分:4)

two formats of Case Expression。简单案例和搜索案例。 您可以使用搜索案例表达式来完成此操作。

CASE WHEN  OINV.Canceled = 'Y' THEN -INV1.StockSum 
     WHEN  INV1.StockSum = 0 THEN INV1.LineTotal
     ELSE  INV1.StockSum 
END AS SaleValue

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

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 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

答案 1 :(得分:0)

试试这个:

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