我正在尝试更新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声明,但我不确定。
答案 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