如何使同一个 SELECT 子句中一个 CASE WHEN 的 ELSE 等于另一个 CASE?
在此示例中,成本下的 ELSE 0 等于收入。如果成本为 0,请使用上面的收入值。
SELECT
subselect.item,
SUM(subselect.Revenue)
SUM(subselect.Cost)
FROM(
Select
item,
item_price,
quantity,
Item_cost,
SUM(CASE
WHEN (item in ('1','2','3'))
THEN item_price * quantity
ELSE 0
END) AS REVENUE,
SUM(CASE
WHEN (item in ('1','2','3'))
THEN item_cost * quantity
ELSE 0
END) AS COST
) AS subselect
...
收入:
项目 | 商品价格 | 数量 | 收入 |
---|---|---|---|
1 | 1 | 2 | 2 |
2 | 3 | 1 | 6 |
3 | 2 | 3 | 6 |
费用:
项目 | 商品成本 | 数量 | 成本 |
---|---|---|---|
3 | 2 | 0 | 0 |
由于成本为 0,因此使用该项目的收入,在本例中为 6。
我正在针对 Oracle 数据库使用 PL SQL Developer。
从您提供的数据看来,您根本不需要子选择,因为您可以使用 Case 表达式检查总成本并选择要选择的内容 - 成本或收入。
WITH -- S a m p l e D a t a :
revenue (ITEM, ITEM_PRICE, QUANTITY, REVENUE) AS
( Select 1, 1, 2, 2 From Dual UNION All
Select 2, 3, 1, 6 From Dual UNION All
Select 3, 2, 3, 6 From Dual ),
cost (ITEM, ITEM_PRICE, QUANTITY, ITEM_COST) AS
( Select 3, 2, 0, 0 From Dual )
-- M a i n S Q L :
Select r.ITEM,
SUM(r.ITEM_PRICE * r.QUANTITY) AS REVENUE,
Case SUM(c.ITEM_COST * c.QUANTITY) When 0 Then SUM(r.ITEM_PRICE * r.QUANTITY)
Else SUM(c.ITEM_COST * c.QUANTITY)
End AS COST
From revenue r
Inner Join cost c ON(c.ITEM = r.ITEM)
Group By r.ITEM
/* R e s u l t :
ITEM REVENUE COST
---------- ---------- ----------
3 6 6 */