Oracle SQL 查询在 "Case When" 子句的帮助下获取值
Oracle SQL query to fetch the values with the help of "Case When" Clause
我正在尝试执行 oracle sql 查询以在 "CASE WHEN THEN" 子句的帮助下获取一些值,但是显示了一些错误,错误说:
ORA-00913: 值太多
00913.00000 - "too many values"
*原因:
*行动:
行错误:13 列:5
您所做的类似于:
with d1 as (select 1 col1, 'A' col2 from dual union select 2, 'B' from dual),
d2 as (select 1 col1, 'Q' col2, 'W' col3, 'E' col4 from dual),
d3 as (select 2 col1, 'R' col2, 'T' col3, 'Y' col4 from dual)
select d1.col1, d1.col2,
case d1.col2
when 'A' then
(select d2.col2, d2.col3, d2.col4 from d2 where d2.col1 = d1.col1)
else
(select d3.col2, d4.col3, d5.col4 from d2 where d2.col1 = d1.col1)
end
from d1
你得到 ORA-00913: 值太多
你应该做的可能是这样的:
with d1 as (select 1 col1, 'A' col2 from dual union select 2, 'B' from dual),
d2 as (select 1 col1, 'Q' col2, 'W' col3, 'E' col4 from dual),
d3 as (select 2 col1, 'R' col2, 'T' col3, 'Y' col4 from dual)
select d1.col1, d1.col2 decision_field,
case d1.col2 when 'A' then d2.col2 else d3.col2 end col2,
case d1.col2 when 'A' then d2.col3 else d3.col3 end col3,
case d1.col2 when 'A' then d2.col4 else d3.col4 end col4
from d1
left join d2 on d2.col1 = d1.col1
left join d3 on d3.col1 = d1.col1
结果:
col1 decision_field col2 col3 col4
1 A Q W E
2 B R T Y
我正在尝试执行 oracle sql 查询以在 "CASE WHEN THEN" 子句的帮助下获取一些值,但是显示了一些错误,错误说:
ORA-00913: 值太多
00913.00000 - "too many values"
*原因:
*行动:
行错误:13 列:5
您所做的类似于:
with d1 as (select 1 col1, 'A' col2 from dual union select 2, 'B' from dual),
d2 as (select 1 col1, 'Q' col2, 'W' col3, 'E' col4 from dual),
d3 as (select 2 col1, 'R' col2, 'T' col3, 'Y' col4 from dual)
select d1.col1, d1.col2,
case d1.col2
when 'A' then
(select d2.col2, d2.col3, d2.col4 from d2 where d2.col1 = d1.col1)
else
(select d3.col2, d4.col3, d5.col4 from d2 where d2.col1 = d1.col1)
end
from d1
你得到 ORA-00913: 值太多
你应该做的可能是这样的:
with d1 as (select 1 col1, 'A' col2 from dual union select 2, 'B' from dual),
d2 as (select 1 col1, 'Q' col2, 'W' col3, 'E' col4 from dual),
d3 as (select 2 col1, 'R' col2, 'T' col3, 'Y' col4 from dual)
select d1.col1, d1.col2 decision_field,
case d1.col2 when 'A' then d2.col2 else d3.col2 end col2,
case d1.col2 when 'A' then d2.col3 else d3.col3 end col3,
case d1.col2 when 'A' then d2.col4 else d3.col4 end col4
from d1
left join d2 on d2.col1 = d1.col1
left join d3 on d3.col1 = d1.col1
结果:
col1 decision_field col2 col3 col4
1 A Q W E
2 B R T Y