使用条件选择结果与另一个表联接

时间:2019-03-18 21:20:12

标签: sql oracle

我有一个表,其中的一列包含7位数或9位数的活动。我还有一张桌子,上面有这些活动的描述。由于我们数据库的设置方式,具有9位数字的活动对应于较大活动中的特定任务,并且要获取较大活动的描述,必须将后两位数字替换为00,然后在活动描述中找到该描述表。我可以在excel中轻松完成此操作,但不确定如何在SQL中执行此操作。我没有任何无法显示的代码,因为我无法获得看起来甚至可以正常工作的任何东西。大多数子查询/联接主题在使用它们与另一个表联接之前都不解决修改结果的问题(或者我只是不理解他们在说什么)。

表示例和所需的输出https://i.stack.imgur.com/8C50R.png

这些是我要采取的步骤

如果a.activity_id为7个字符,则将activity_id显示为新列“ descr”

如果a.activity_id为9个字符,则将后2个替换为00,然后
       在新列“ descr”中显示新9个字符的活动描述

在表b中加入新列“ descr”以显示一般活动的描述(以00结尾)

将7位数字的活动(无论最初进行多长时间)和活动说明结合起来

我可以使用substr和concat显示新的9位数字#,但是我不知道如果activity_id为9,如何只显示9位数字。

我也不知道如何使用修改后的select语句结果与另一个表联接。 非常感激任何的帮助。谢谢!

[1]:

1 个答案:

答案 0 :(得分:1)

您的问题很难理解-很难说出什么是表,什么是列,什么用于处理以及结果集中需要什么。

我认为问题的症结在于如何表达join条件。这是一种方法:

select . . . 
from a join
     c
     on c.activity_id = (case when len(a.activity_id) = 7 then a.activity_id
                              else substr(a.activity_id, 1, 7) || '00'
                         end)