我正在尝试更新销售分析多维数据集中的以下查询段。我对 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
我想要实现的是,当 OINV.Canceled = 'Y' 时,第二个 CASE 语句也返回负值 (SaleValue)。我想我需要在这里嵌套一个 CASE 语句,但我不确定。
最佳答案
有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
关于SQL 嵌套 CASE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31312214/