拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 OracleSQL:使用变量和条件进行选择

OracleSQL:使用变量和条件进行选择

白鹭 - 2022-03-15 2092 0 0

我正在根据变量的结果创建一个带有条件的查询。

  • 如果 PROD = 'alpha' 我只需要显示模型 2、3、4、5 和 6;
  • 如果 PROD = 'beta' 则只有模型 0 和 1 出现。

DEFINE PROD = 'ALPHA'

SELECT CAR_CODE, CAR, MODELS
FROM TB_CAR_MODELS
WHERE (
CASE PROD
WHEN 'ALPHA' THEN MODELS IN (2,3,4,5,6)
WHEN 'BETA' THEN MODELS IN (0,1)
END
);

我创建了这个查询,但它不起作用。回传错误:

你能帮我吗?谢谢

uj5u.com热心网友回复:

几个示例行:

SQL> select * from tb_car_models;

  CAR_CODE CAR      MODELS
---------- ---- ----------
         1 BMW           2  -- ALPHA
         2 Audi          5  -- ALPHA
         3 Opel          0  -- BETA

SQL>

当我在 SQL*Plus 中运行它时,我使用了一个替换变量:

SQL> select *
  2  from tb_car_models
  3  where models in (select models
  4                   from tb_car_models
  5                   where models in (2, 3, 4, 5, 6)
  6                     and '&&prod' = 'ALPHA'
  7                   union all
  8                   select models
  9                   from tb_car_models
 10                   where models in (0, 1)
 11                     and '&&prod' = 'BETA'
 12                  );
Enter value for prod: ALPHA

  CAR_CODE CAR      MODELS
---------- ---- ----------
         1 BMW           2
         2 Audi          5

SQL> undefine prod
SQL> /
Enter value for prod: BETA

  CAR_CODE CAR      MODELS
---------- ---- ----------
         3 Opel          0

SQL>

根据您使用的工具,这可能是 eg... and :prod = 'ALPHA'或类似的。

uj5u.com热心网友回复:

我认为这里有一个很好的答案可以帮助您: 缺少关键字 (ORA-00905) - Oracle SQL Case Statement

检查出。

uj5u.com热心网友回复:

您可以修改您的 sql 陈述句如下:

SELECT CAR_CODE, CAR,
(CASE S.PROD
WHEN CASE S.PROD = 'ALPHA' THEN MODELS IN (2,3,4,5,6)
WHEN  CASE S.PROD =  'BETA' THEN MODELS IN (0,1)
END
)  MODELS
FROM TB_CAR_MODELS S
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *