[英]SQL Query from one table and multiple columns to get the expected value
我有一个表 XX_LEARN 有以下详细信息
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
在此表中,仅当 Learning Item Type = 'Offering' 时才会填充 Offering_course 和 Activity_Name。 当学习项目类型=“课程”时,仅会填充学习项目名称列,并且提供课程和活动名称将为 null。
现在预期的 output 来自查询是 -
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 和学习项目名称 = 'Offering' 课程名称列中应显示相应的活动名称。
这必须在单个查询中完成,因为我在 OTBI 分析中使用它。 有什么办法可以使用 UNION function 来实现这一点?
这里不需要union
。 您可以只使用case
表达式:
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
您可以使用WINDOWS
function 和简单的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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.