我有以下查询:
select
CASE
WHEN f.nature = 'box'
THEN 1
WHEN f.nature = 'bag'
THEN 3
ELSE 0
END AS Pnature,
CASE
WHEN f.type = 'electronics'
THEN 0
WHEN f.type = 'cloths'
THEN 3
ELSE 0
END AS Ptype
from product f
Run Code Online (Sandbox Code Playgroud)
现在我想以某种方式在 select 语句中对 Pnature+Ptype 求和,然后再做一个 CASE,即如果 Pnature+Ptype<100 然后是 20。
有没有办法做到这一点?
使用派生表,如已经显示的,是一种方法。另一种是使用CROSS APPLY:
SELECT
CASE
WHEN x.Pnature + x.Ptype < 100 THEN 20
ELSE ...
END,
...
FROM
dbo.product AS f
CROSS APPLY
(
SELECT
CASE
WHEN f.nature = 'box' THEN 1
WHEN f.nature = 'bag' THEN 3
ELSE 0
END,
CASE
WHEN f.type = 'electronics' THEN 0
WHEN f.type = 'cloths' THEN 3
ELSE 0
END
) AS x (Pnature, Ptype)
;
Run Code Online (Sandbox Code Playgroud)
这两种方法有些相似:在这两种情况下,您都是在嵌套的 SELECT 中定义表达式。APPLY 方法的不同之处在于您不嵌套主查询,仅嵌套您想在主 SELECT 中额外引用的位。