sql - 使用 SQL 作为 xlookup
问题描述
我有 3 个表需要从中检索数据 + 我还需要一个附加列 (ResearchIDName),其作用类似于 c2 表中的 xlookup。到目前为止,我已经创建了以下关于如何从 3 个表中检索所需数据的脚本,并附上了一张关于我的表的外观和结果应该如何的图像,但我需要关于这个附加列 (ResearchIDName) 的帮助。ResearchIDName 的 xlookup 公式为:XLOOKUP(O3,I:I,H:H)。所有研究 ID 都将出现在表 c2 的 SID 列中,而 Companynames 列指的是 SID 列,所以我需要的只是让这个单独的列提及研究 ID 公司的名称。你有什么建议吗?
*编辑 ResearchIDName 的结果将是在所有 SID 中搜索并从公司名称中检索名称。每个 SID 都有一个不同的 ResearchID。SID 名称可以是 McDonalds,而其 Research 名称可以是 KFC。结果中的 Companyname 目前显示的是 SID 的公司名称,我还需要 Research ID 的公司名称。
表c0
+-----+----------+
| FID | Comments |
+-----+----------+
| g17 | Food |
| h11 | Retail |
| j12 | Banks |
表c1
+-------+-----+
| SID | FID |
+-------+-----+
| 12345 | g17 |
| 34567 | h11 |
| 56152 | j12 |
+-------+-----+
表c2
+-------+-------------+------------+
| SID | Companyname | ResearchID |
+-------+-------------+------------+
| 12345 | McDonalds | 67789 |
| 34567 | Sainsbury's | 37832 |
| 56152 | Barclays | |
+-------+-------------+------------+
期望的结果
+-------+-----+----------+-------------+------------+----------------+
| SID | FID | Comments | Companyname | ResearchID | ResearchIDName |
+-------+-----+----------+-------------+------------+----------------+
| 12345 | g17 | Food | McDonalds | 29182 | KFC |
| 34567 | h11 | Retail | Sainsbury's | 91821 | Tesco |
| 56152 | j12 | Banks | Barclays | | |
+-------+-----+----------+-------------+------------+----------------+
Select c0.FID, c0.Comments,
c1.sid,
c2.Companyname, c2.ResearchID,
ResearchIDName
From c0
Left join c1 On c1.FID=c0.FID
Left join c2 On c2.SID=c1.SID
**编辑 @a_horse_with_no_name 建议的脚本在 ResearchID 是整数列时有效。就我而言,它是一个 varchar,这就是我不断收到错误的原因。但以下调整有效(在“on r.sid = c2.ResearchID”之后添加“::varchar”)
Select c0.FID,
c0.Comments,
c1.sid,
c2.Companyname,
c2.ResearchID,
r.companyname as research_company_name
From c0
Left join c1 on c1.FID = c0.FID
Left join c2 on c2.sid = c1.sid
left join c2 as r on r.sid = c2.researchid::varchar
</p>
解决方案
假设KFC
andTesco
也存储在c2
表中的某个位置(您没有显示,所以我不得不猜测),那么我会假设您只需要另一个联接:
Select c0.FID,
c0.Comments,
c1.sid,
c2.Companyname,
c2.ResearchID,
r.companyname as research_company_name
From c0
Left join c1 on c1.FID = c0.FID
Left join c2 on c2.sid = c1.sid --<< changed from your original query
left join c2 as r on r.sid = c2.researchid --<< this finds a company that matches the researchid column
您的查询包含on c2.SID = b2.SID
会导致错误的连接条件,因为您的示例中没有别名b2
。我猜你的意思是c2.sid = c1.sid
推荐阅读
- twilio - 在房间里从拨号盘收集数字
- bash - 如果“特定”列的行匹配,则比较“特定”列的行并连接其他列
- c# - Selenium 问题关闭弹出窗口
- flutter - 覆盖 operator== 是否有助于避免重建?
- python - 如何在 Python 中结合以下理解?
- python - 如何在 docker(Azure Web App)中为 Python 导入 cv2?
- python - 在条件上接收 Python unindent 错误我认为缩进看起来正确
- node.js - 在 express 中,当满足条件时,如何路由到自定义错误模板?
- c# - 实现基于组的角色 ASP.NET MVC CORE
- python - 如何为 DataFrame 中的每一行聚合来自 ID 匹配的 N 个其他 DataFrames(在特定列上)的数据