首页 > 解决方案 > 对 CASE WHEN 使用新变量

问题描述

我有下表:

CREATE TABLE my_table 
(
    the_debt_id varchar(6) NOT NULL, 
    the_debt_amount int NOT NULL, 
    the_debt_date date NOT NULL
)

INSERT INTO my_table
VALUES ('LMUS01', '180', '12/2/2019'), 
       ('LMUS01', '200', '11/2/2019'), 
       ('LMUS01', '300', '13/2/2019'), 
       ('LMUS02', '100', '10/2/2019'), 
       ('LMUS02', '150', '12/2/2019')

我想创建一个名为 debt_taxed 的变量,然后在某些限制下创建一个基于 debt_taxed 的变量,将其命名为“超出”、“包含”或“滚动:

SELECT the_debt_amount * 1.18 as debt_taxed, 
CASE WHEN the_debt_taxed >= 250 THEN 'Exceed' 
WHEN (the_debt_taxed < 250 and the_debt_taxed >= 200) THEN 'contained' 
ELSE 'rolling' 
END AS status 
FROM my_table

但是我收到一个错误,说 the_debt_taxed 不存在。

请,任何帮助将不胜感激。

标签: sqlcase-when

解决方案


只需用实际计算替换debt_taxed你的。CASE

SELECT
    debt_taxed = the_debt_amount * 1.18
    ,status = CASE
                  WHEN the_debt_amount * 1.18 >= 250 THEN 'Exceed'
                  WHEN
                  (
                      the_debt_amount * 1.18 < 250
                      AND the_debt_amount * 1.18 >= 200
                  ) THEN 'contained'
                  ELSE 'rolling'
              END
FROM my_table;

如果您想使用 CTE(公用表表达式),您可以执行以下操作:

;WITH CTE AS
(
    SELECT
        debt_taxed = m.the_debt_amount * 1.18
        ,m.the_debt_id
        ,m.the_debt_date
    FROM my_table m
)
SELECT 
    c.debt_taxed
    ,c.the_debt_id
    ,c.the_debt_date
    ,status = CASE
                  WHEN c.debt_taxed >= 250 THEN 'Exceed'
                  WHEN
                  (
                      c.debt_taxed < 250
                      AND c.debt_taxed >= 200
                  ) THEN 'contained'
                  ELSE 'rolling'
              END
FROM CTE c;

推荐阅读