我正在努力研究如何加入几个表以在查询中获得特定结果。
我有两张桌子:
一个
[T_Prog]表,其中包含所有可能的ID1&ID2记录,PRGCASH每条记录的数量与其各自的MONTHNUMBER.一个
[T_ALS]表,其中包含所有可能的ID1&ID2记录的一部分,其中ALSCASH每个记录都针对其各自的MONTHNUMBER.
我想要做的是将PRGCASHandALSCASH字段放入单个查询中,并与它们各自的ID1,ID2和MONTHNUMBER字段进行适当匹配。
每个表中记录的唯一性是ID1,ID2和MONTHNUMBER字段的组合。
我遇到的问题是,该[T_ALS]表包含的MONTHNUMBER每个唯一ID1和ID2组合条目比表中包含的条目更多[T_Prog]。
所以如果我这样做...
SELECT [T_Prog].ID1, [T_Prog].ID2, [T_Prog].MONTHNUMBER, [T_Prog].PRGCASH, [T_ALS].ALSCASH
FROM [T_Prog]
LEFT JOIN [T_ALS] ON ([T_Prog].ID1 = [T_ALS].ID1) AND ([T_Prog].ID2 = [T_ALS].ID2) AND ([T_Prog].MONTHNUMBER = [T_ALS].MONTHNUMBER)
...我得到了所有可能的记录,但是由于表没有等效记录,因此任何其他记录[T_ALS]都MONTHNUMBER将丢失。[T_Prog]
如果我这样做...
SELECT [T_ALS].ID1, [T_ALS].ID2, [T_ALS].MONTHNUMBER, [T_Prog].PRGCASH, [T_ALS].ALSCASH
FROM [T_ALS]
LEFT JOIN [T_Prog] ON ([T_ALS].ID1 = [T_Prog].ID1) AND ([T_ALS].ID2 = [T_Prog].ID2) AND ([T_ALS].MONTHNUMBER = [T_Prog].MONTHNUMBER)
...我不会得到所有可能的记录,因为该[T_ALS]表仅包含所有可能记录的一部分。
这是带有示例数据的 2 个表和我试图实现的最终查询表的说明:
Prog桌子:
|[ID1]|[ID2]|[MONTHNUMBER]|[PRGCASH]|
| 1 | A | 1 | 600 |
| 1 | B | 1 | 500 |
ALS桌子:
|[ID1]|[ID2]|[MONTHNUMBER]|[ALSCASH]|
| 1 | A | 1 | 100 |
| 1 | A | 2 | 100 |
| 1 | A | 3 | 100 |
理想结果:
|[ID1]|[ID2]|[MONTHNUMBER]|[PRGCASH]|[ALSCASH]|
| 1 | A | 1 | 600 | 100 |
| 1 | A | 2 | | 100 |
| 1 | A | 3 | | 100 |
| 1 | B | 1 | 500 | |