sql - JOIN 删除没有条目的行
问题描述
我想显示列,即使它们没有条目来显示它们没有数据。我发现连接需要省略行。
我有两张桌子
|TRADEID | Value | Date |
|--------|-------|-----------|
| a | 100 | 01/01/2020|
| b | 500 | 01/01/2020|
| c | 10 | 01/01/2020|
| d | 130 | 01/01/2020|
| ID | TradeID | Role | employeeID|
|-----|---------|---------|-----------|
| 1 | a | Trader | T1 |
| 2 | a | Seller | S1 |
| 3 | b | Trader | T1 |
| 4 | d | Trader | T2 |
| 5 | d | Seller | S1 |
| 6 | d | Reporter| R1 |
我想结束以下
TradeID | Trader | Seller | Reporter| Value|
---------|--------|--------|---------|------|
a | T1 | S1 | | 100 |
b | T1 | | | 500 |
c | | | | 10 |
d | T2 | S1 | R1 | 130 |
我目前的查询是:
select t1.TradeID, r1.employeeID, r2.employeeId, r3.employeeId, t1.value
From tradeTable t1
join RoleTable r1 on t1.TradeID = r1.TradeID and r1.role = 'Trader'
join RoleTable r2 on t1.TradeId = r2.TradeID and r1.role = 'Seller'
join RoleTable r3 on t1.TradeId = r3.TradeID and r1.role = 'Reporter'
但是,这仅返回行 d,因为它具有所有值。
解决方案
你可以left join
:
select t1.TradeID, r1.employeeID trader, r2.employeeId seller, r3.employeeId reporter, t1.value
from tradeTable t1
left join RoleTable r1 on t1.TradeID = r1.TradeID and r1.role = 'Trader'
left join RoleTable r2 on t1.TradeId = r2.TradeID and r1.role = 'Seller'
left join RoleTable r3 on t1.TradeId = r3.TradeID and r1.role = 'Reporter'
另一种选择是条件聚合:
select t1.TradeID,
max(case when r.role = 'Trader' then r.employeeID end) trader,
max(case when r.role = 'Seller' then r.employeeID end) seller,
max(case when r.role = 'Reporter' then r.employeeID end) reporter,
t1.value
from tradeTable t1
left join RoleTable r
group by t1.TradeID, t1.value
您可能想要测试这两个选项,以评估哪一个对您的数据集更有效。
推荐阅读
- excel - 如果日期范围在某个月份处于活动状态,则 Excel 计数
- c++ - 有效地删除字节数组中的下半字节 - C++
- react-native - 为变量创建存储时出现错误
- java - 如何编辑存储在共享首选项中的自定义对象数组列表中的数据?我正在使用这个类来存储和访问
- reporting-services - 报告变量隐藏表达式的 ReportViewer.Forms SecurityException
- python - 用于非冗余聚类的合成数据生成器
- pyspark - 如何在pyspark中读取excel文件?
- ruby-on-rails - 无法在 ruby on rails 上创建或更新表
- asp.net - 如何在 IIS 中设置我的 ASP.NET 后端?
- reactjs - 如何在 Animated.View 中显示正在播放的音频的进度?