【发布时间】:2019-01-16 16:22:14
【问题描述】:
我正在尝试编写一个 case 语句,一旦从每个“WHEN”语句中找到正确的值,它就会返回一个值。一旦找到符合条件的值,查询就不应尝试评估其他语句。
SELECT
DT1.COMPANY_ID
, CASE
WHEN DT1.RATING_NUMBER = 2 THEN DT1.UNIQUE_ENTRY_ID
WHEN DT1.RATING_NUMBER = 1 THEN DT1.UNIQUE_ENTRY_ID
WHEN DT1.RATING_NUMBER = 3 THEN DT1.UNIQUE_ENTRY_ID
END AS UNIQUE_ENTRY_ID
FROM
RATINGS_DATA DT1
样本数据
create table COMP_RESULTS (COMPANY_ID varchar2(20),RATING_NUMBER number, UNIQUE_ENTRY_ID varchar2(20));
insert into COMP_RESULTS values ('Org00001','1','ENTRY_C1_1');
insert into COMP_RESULTS values ('Org00001','2','ENTRY_C1_2');
insert into COMP_RESULTS values ('Org00001','3','ENTRY_C1_3');
insert into COMP_RESULTS values ('Org00002','2','ENTRY_C2_2');
insert into COMP_RESULTS values ('Org00002','3','ENTRY_C2_3');
insert into COMP_RESULTS values ('Org00003','3','ENTRY_C3_3');
每天都会发布每家公司的评级数字;有时是全部,有时不是全部)。如果评级编号为 1,则生成相应的唯一 ID。如果评级数为 2,则发布相应的 ID。如果评级 '1' 被释放,查询会带来公司 ID 和相应的UNIQUE_ENTRY_ID。它不应该费心查看第二个“WHEN”语句。如果评级编号“1”不存在,则尝试 2,如果都不存在,则尝试 3,依此类推。
样本结果
Org00001 2 ENTRY_C1_1
Org00002 2 ENTRY_C2_2
Org00003 3 ENTRY_C3_3
有人可以帮忙吗?
【问题讨论】:
-
请发布一些示例数据和预期结果
-
也许我误解了这个问题,但这不是 SQL CASE 语句的工作方式吗?您是否尝试做一些与平常不同的事情?
-
请注意,CASE WHEN 就是这样工作的。一旦 WHEN 标准有效,它就会脱离它,忽略它之后的 WHEN。
-
您是否为每个公司返回多行,但您只希望每个公司首先匹配的行中的值? “每一天”在哪里适合 - 什么日子?一家公司可以有多行相同的评级编号,如果可以,您将如何决定使用哪个关联的条目 ID? 请在您的问题中添加示例数据和预期结果(使用 edit,而不是 cmets)。
-
@JoshuaTinashe - 它是 case 表达式的工作原理。你问错了问题……你的问题不在于 case 表达式如何工作,而在于你试图用一个来解决它不适合的问题。
标签: sql oracle if-statement case