首页 > 解决方案 > 使用条件选择结果与另一个表连接

问题描述

我有一张表,其中有一列包含 7 位或 9 位数字的活动。我有另一个表,其中有这些活动的描述。由于我们数据库的设置方式,具有 9 位数字的活动对应于更大活动中的特定任务,并且要获得更大活动的描述,您必须将最后 2 位数字替换为 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 个字符的活动描述

将新列“descr”与表 b 连接以显示通用活动的描述(以 00 结尾)

连接 7 位数活动(无论最初有多长时间)和活动描述

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

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

[1]:

标签: sqloracle

解决方案


你的问题很难理解——很难分辨什么是表,什么是列,什么是用于处理的,什么是结果集中需要的。

我认为问题的症结在于如何表达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)

推荐阅读