sql - 对 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 不存在。
请,任何帮助将不胜感激。
解决方案
只需用实际计算替换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;
推荐阅读
- java - 无法获得以下内容的短代码
- flutter - 如何在颤振中使用 youtube api
- mysql - AWS lambda 中的 SQL 查询语法错误;“Dec”这个词不起作用,但“Dev”工作正常
- react-native-fbsdk - 如果安装了 facebook 应用程序,facebook 登录反应本机不起作用
- ios - UITabbar 背景图像重复出现
- sql - CTE中的求和函数在sql中递归
- javascript - 使用 UniversalRouter 和 React-started-kit 登录验证 reactjs
- vba - Access-VBA:如何通过名称从 Forms!frmB 中引用 Forms!frmA 中的变量?
- javascript - 为什么在比较时与“”不同
- gitlab - 如何将外部存储库与 GitLab 运行器一起使用?