Plsql 比较两个案例语句中的值
我已经安装了Oracle11g版本,正在HR测试数据库包上练习。这个问题比我要求的要小得多: 我的问题是:Plsql 比较两个案例语句中的值,plsql,case,Plsql,Case,我已经安装了Oracle11g版本,正在HR测试数据库包上练习。这个问题比我要求的要小得多: 我的问题是: Select description, Case_First_Level, Case_Second_Level, Case_Difference from (Select p.country_name as description, (case when (l.location_id between '1000' and '1300') then (l.postal_cod
Select description, Case_First_Level, Case_Second_Level, Case_Difference
from
(Select p.country_name as description,
(case when (l.location_id between '1000' and '1300') then (l.postal_code) else '0' end) as Case_First_Level,
(case when (l.location_id between '1400' and '1700') then (l.postal_code) else '0' end) as Case_Second_Level,
(case when
(
(case when l.location_id between '1000' and '1300' then (l.postal_code) else '0' end) >
(case when l.location_id between '1400' and '1700' then (l.postal_code) else '0' end)
)
then 1000 else 2000 end) as Case_Difference
from countries p, locations l
where l.country_id = p.country_id
and p.country_id in ('IT', 'US', 'CN')
group by p.country_name, p.country_id, l.country_id, l.postal_code, l.location_id
)
此查询工作正常,我得到以下输出:
DESCRIPTION CASE_FIRST_LEVEL CASE_SECOND_LEVEL CASE_DIFFERENCE
United States of America 0 26192 2000
China 0 0 2000
Italy 10934 0 1000
United States of America 0 50090 2000
Italy 00989 0 1000
United States of America 0 99236 2000
United States of America 0 98199 2000
现在,我想用条件中的值替换Case_Difference列中的值1000和2000,也就是说,我想用(Case_First_Level-Case_Second_Level)中的值1000替换静态值,反之亦然。现在,既然这里不能识别别名,有没有办法做到这一点
谢谢
编辑:立即上载正确的代码。尝试:
SELECT DESCRIPTION,
CASE_FIRST_LEVEL,
CASE_SECOND_LEVEL,
ABS(CASE_FIRST_LEVEL - CASE_SECOND_LEVEL) AS CASE_DIFFERENCE
FROM (Select p.country_name as description,
case
when l.location_id between '1000' and '1300'
then l.postal_code
else '0'
end as Case_First_Level,
case
when l.location_id between '1400' and '1700'
then l.postal_code
else '0'
end as Case_Second_Level,
from countries p
INNER JOIN locations l
ON l.country_id = p.country_id
WHERE p.country_id in ('IT', 'US', 'CN')
group by p.country_name,
p.country_id,
l.country_id,
l.postal_code,
l.location_id)
请注意,作为CASE_差异的计算ABS(CASE_FIRST_LEVEL-CASE_SECOND_LEVEL)
将CASE_FIRST_LEVEL和CASE_SECOND_LEVEL计算为可转换为数字,这可能并不总是如此,因为它们是邮政编码值(例如,考虑类似于“W11 2BQ”的英国邮政编码)
分享和享受。尝试:
SELECT DESCRIPTION,
CASE_FIRST_LEVEL,
CASE_SECOND_LEVEL,
ABS(CASE_FIRST_LEVEL - CASE_SECOND_LEVEL) AS CASE_DIFFERENCE
FROM (Select p.country_name as description,
case
when l.location_id between '1000' and '1300'
then l.postal_code
else '0'
end as Case_First_Level,
case
when l.location_id between '1400' and '1700'
then l.postal_code
else '0'
end as Case_Second_Level,
from countries p
INNER JOIN locations l
ON l.country_id = p.country_id
WHERE p.country_id in ('IT', 'US', 'CN')
group by p.country_name,
p.country_id,
l.country_id,
l.postal_code,
l.location_id)
请注意,作为CASE_差异的计算ABS(CASE_FIRST_LEVEL-CASE_SECOND_LEVEL)
将CASE_FIRST_LEVEL和CASE_SECOND_LEVEL计算为可转换为数字,这可能并不总是如此,因为它们是邮政编码值(例如,考虑类似于“W11 2BQ”的英国邮政编码)
分享和享受