带有 CASE 的 select 语句中的多个计算

Shi*_*ury 2 sql-server

我有以下查询:

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。

有没有办法做到这一点?

And*_*y M 5

使用派生表,如已经显示的,是一种方法。另一种是使用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 中额外引用的位。