sql - 使用条件选择结果与另一个表连接
问题描述
我有一张表,其中有一列包含 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]:
解决方案
你的问题很难理解——很难分辨什么是表,什么是列,什么是用于处理的,什么是结果集中需要的。
我认为问题的症结在于如何表达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)
推荐阅读
- python - 如何一次执行多个 SQL 语句?
- angular - ESLint - 选择器应该用作元素
- karate - 使用空手道运行两个并行执行的问题
- ios - '/Users/XXX/Library/Developer/Xcode/DerivedData/XXX/Build/Products/Debug-iphoneos/Charts/Charts.modulemap' 未找到
- c# - Net Core:将 Exif 数据添加到图像
- kubernetes - 在 OpenShift 上以 root 权限启动 pod
- angular - Angular.json - 为测试设置默认配置
- javascript - 如何从服务器到客户端的第二次发布请求中显示错误
- python - 如何从 sympy 中的 NotImplementedError 获取值?
- mysql - MySQL,确定在某个商店进行首次交易的客户数量