【发布时间】:2021-06-19 10:20:12
【问题描述】:
我有两个包含面板数据的表(称为 tbl1 和 tbl3)和另一个用于将它们连接在一起的表(tbl2)。 tbl1 有所有参与者的数据,但 tbl3 只有其中的一个子集。示例数据表是:
tbl1:
| partkey | date | energy |
|---|---|---|
| 1 | 1/1/2021 | 567 |
| 1 | 2/1/2021 | 585 |
| 2 | 1/1/2021 | 1305 |
| 2 | 2/1/2021 | 1324 |
| 3 | 1/1/2021 | 860 |
| 3 | 2/1/2021 | 869 |
tbl2:
| partkey | assignkey |
|---|---|
| 1 | 54 |
| 2 | 63 |
| 3 | 65 |
tbl3:
| assignkey | dt | lossfactor |
|---|---|---|
| 54 | 1/1/2021 | .86 |
| 54 | 2/1/2021 | .85 |
| 65 | 1/1/2021 | .67 |
| 65 | 2/1/2021 | .69 |
我想合并这些表,以便获得所有记录,而不仅仅是两个表共有的记录。我还在代码中将空值替换为 1。这是所需的输出:
| partkey | date | energy | lossfctr |
|---|---|---|---|
| 1 | 2/1/2021 | 585 | .85 |
| 2 | 2/1/2021 | 1324 | 1 |
| 3 | 2/1/2021 | 869 | .69 |
我的代码现在知道匹配 id 但不匹配日期,所以我得到一个变量(能量)的日期-id 组合值,但另一个变量(损失因子)的所有日期值。
SELECT tbl1.partkey, tbl1.date, tbl1.energy, IIf(IsNull(tbl3.lossfactor),1,tbl3.lossfactor) AS lossfctr FROM (tbl1 INNER JOIN tbl2 ON tbl2.partkey = tbl1.partkey ) left join tbl3 on tbl2.assignkey = tbl3.assignkey WHERE ( ((tbl1.partkey=1) OR (tbl1.partkey=2) OR (tbl1.partkey=3)) AND (tbl1.date=#2/1/2021#) AND (tbl3.dt=#2/1/2021#))
UNION
SELECT tbl1.partkey, tbl1.date, tbl1.energy, IIf(IsNull(tbl3.lossfactor),1,tbl3.lossfactor) AS lossfctr FROM (tbl1 INNER JOIN tbl2 ON tbl2.partkey = tbl1.partkey ) left join tbl3 on tbl1.date = tbl3.dt WHERE ( ((tbl1.partkey=1) OR (tbl1.partkey=2) OR (tbl1.partkey=3)) AND (tbl1.date=#2/1/2021#) AND (tbl3.dt=#2/1/2021#));
`
我还尝试在 id 和日期这两个列上进行左连接,但它给了我一个错误。
谢谢! 这两个链接很有帮助: https://support.microsoft.com/en-us/office/join-tables-and-queries-3f5838bd-24a0-4832-9bc1-07061a1478f6
【问题讨论】:
-
编辑问题以将示例数据结构和所需输出显示为文本表。
标签: ms-access left-join full-outer-join