我具有以下数据的oracle数据库表“ mytable”-
ID ORDER ACTION CB TV
35547225 CHANGE< Add TV 100788581
35355239 CHANGE< Add G76763164 014580531
35779535 CHANGE Add TVservi 038894810
35591230 CHANGE< Add G87178597
35814001 CHANGE Rem TVservi 011733179
35418962 CHANGE< Rem TV 011733179
我想以以下格式获取输出,并在其他列中添加“ CT”-
ID ORDER ACTION CB TV CT
35547225 CHANGE Add 100788581 Only TV
35355239 CHANGE Add G76763164 014580531 Both
35779535 CHANGE Add 038894810 Only TV
35591230 CHANGE Add G87178597 Only CB
35814001 CHANGE Remove 011733179 Only TV
35418962 CHANGE Remove 011733179 Only TV
我要跟踪输出的变化-
在“ ORDER”列中-如果在“ mytable”中为“ CHANGE <”,则应为 输出为“ CHANGE”。
-如果“ mytable”中为“ Rem”,则应为 在输出中“删除”。
在“ CB”列中-如果它以G开头,然后是8位数字,则 保持原样,否则在输出中将其设置为NULL
通过基于以下内容编写注释,在输出中再添加一列“ CT” 符合条件-
如果CB为NULL,电视不为NULL,则“仅电视”
如果CB不为空,电视不为空,则“两者”
如果CB不为空而TV为NULL,则“仅CB”
答案 0 :(得分:3)
您可以使用CASE
子句根据任意逻辑来计算各种列值:
select
id,
case when "order" = 'CHANGE' then 'CHANGE'
when "order" = 'CHANGE<' then 'CHANGE'
end as "order",
case when action = 'Rem' then 'Remove'
else action
end as action,
case when regexp_like(cb, 'G[0-9]{8}') then cb
else null
end as cb,
tv,
case when cb is null and tc is not null then 'Only TV'
when cb is not null and tv is not null then 'Both'
when cb is not null and tv is null then 'Only CB'
end as ct
from my_table
请注意,order
是保留字,通常不用作列名。如果要使用它,则需要用双引号(“)括起来。