sql—标识计算列并从中读取值

2wnc66cl  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(312)

我有一个简单的表格,里面有一批学生的数据和他们在不同年份的分数(数据可能不现实,但这只是一个例子)。

Name    Dept       HOD         Year1     Year2    Year3    Year4
Sam     Science    Christie    76.23     34.65    45.67    23.45
Mike    Science    Christie    57.987    26.98    43.98    78.34
Bonny   Maths      Christie    64.87     67.23    34.09    12.87
Ben     English    Simon       43.98     54.76    55.87    76.87

现在的要求是,以2015年为参照点,如果用户进入2018年,希望获得佳士得管理的科学部门的sam数据,那么第3列(即2018-2015年)的值预计适用于所有这些条件。

For example - 
[case
when Name='Sam' and Dept='Science' and HOD='Christie' then Year*
when Name='Bonny' and Dept='Maths' and HOD='Christie' then Year*
when Name='Ben' and Dept='English' and HOD='Simon' then Year*
end]

我已经试过sql了-

select Value from (
select concat('Year', abs(2018-2015)) as Value from Class where 
Name='Sam' and Dept='Science' and HOD='Christie')

所以,当我在上面的查询中硬编码year3而不是公式时,它工作得很好。当我单独触发计算值时,它给出的是输出。从类别中选择concat('年份',abs(2018-2015)作为值
但是当我集成这两者时,我的查询只给出一个字符串year3。而我想为该列选择值。
可能是我做错了什么,我不确定,但欢迎任何建议来解决这个问题。
我看到一篇帖子,建议使用coalesce()动态调用列。所以我也试过了-

select coalesce(Value, T.period,0) as Value from (
select concat('Year',(abs(2018-2015)))as period, Name, Dept, HOD from 
Class where Name='Sam' and Dept='Science' and HOD='Christie') as T 
where T.Name='Sam' and T.Dept='Science' and T.HOD='Christie'

但我收到了错误-

Error while compiling statement: FAILED: SemanticException [Error 10004]: 
line 1:16 Invalid table alias or column reference 'Value': (possible 
column names are: period, Name, Dept, HOD)
jogvjijk

jogvjijk1#

这就是你想要的吗?

select (case when @year = 2016 then year1
             when @year = 2017 then year2
             when @year = 2018 then year3
             when @year = 2019 then year4
        end) as value
from class c
where hod = 'Christie'

相关问题