从一个表和多个列执行SQL查询以获取预期值
我有一个表XX_LEARN,有以下详细信息从一个表和多个列执行SQL查询以获取预期值,sql,oracle,obiee,Sql,Oracle,Obiee,我有一个表XX_LEARN,有以下详细信息 Name Offering_course Activity_Name Learning Item Name Learning Item Type XYZ COMPUTERS Course XYZ BIOTECH BIOTECH-1
Name Offering_course Activity_Name Learning Item Name Learning Item Type
XYZ COMPUTERS Course
XYZ BIOTECH BIOTECH-1 BIOTECH_OFFER Offering
XYZ BIOTECH_OFFER Course
DEF MATHS MATHS-1 MATHS_OFFER Offering
DEF Science Course
在此表中,仅当学习项目类型为“产品”时,才会填充产品课程和活动名称。当学习项目类型为'Course'时,将仅填充列学习项目名称,并且这些列的课程和活动名称将为空
现在,查询的预期输出为-
Name Activity_Name Course Name Learning Item Type
XYZ COMPUTERS Course
XYZ BIOTECH-1 BIOTECH Offering
DEF MATHS-1 MATHS Offering
DEF Science Course
即,课程名称列应包括XX_Learn中的学习项目名称=‘课程’,并将这些项目的活动名称显示为null,对于学习项目名称=‘课程’列,课程名称列应显示相应的活动名称
这必须在单个查询中完成,因为我正在OTBI分析中使用它。有什么方法可以使用UNION函数来实现这一点吗?这里不需要
UNION
。您可以使用大小写表达式:
select
name,
activity_name,
case when learning_item_type = 'Course'
then learning_item_name
else offering_course
end course_name,
learning_item_type
from mytable
:
NAME | ACTIVITY_NAME | COURSE_NAME | LEARNING_ITEM_TYPE
:--- | :------------ | :---------- | :-----------------
XYZ | null | COMPUTERS | Course
XYZ | BIOTECH-1 | BIOTECH | Offering
DEF | MATHS-1 | MATHS | Offering
DEF | null | Science | Course
名称|活动|名称|课程|名称|学习|项目|类型
:--- | :------------ | :---------- | :-----------------
XYZ |空|计算机|课程
XYZ生物技术-1生物技术产品
定义|数学-1 |数学|课程
定义|空|科学|课程
您可以使用WINDOWS
功能和简单的CASE..WHEN
如下所示:
select * from
(select name, activity_name, case when learning_item_type = 'Course'
then learning_item_name
else offering_course
end course_name,
row_number() over (partition by learning_item_name order by learning_item_type desc) as rn
from your_table)
where rn = 1
@GMB-我已经编辑了您的“插入”查询,以显示我现在面临的确切问题。你能帮我删除副本吗?这和欧比有什么关系?它不使用查询。它使用模型。