我有 2 个表,A 和 B,它们看起来像这样:
A表是这样的:
RECORD_NUMBER INDEXNO SUFFIX FILENO YEAR INDEXTYPE
------------- ----------- ------ ------ ------- ---------
123382 4037 1019 2004
123383 4038 1019 2003
124814 3586 1019 2005
117912 2007 1019 2007
B 表是这样的:
RECORD_NUMBER NOI_DATE CALNO CALTRACK_FILENO FILENO YEAR CALTYPE
------------- ----------- --------- --------------- ------ ------- -------
23421 2022-02-23 2022T0930 xxxxx 1019 1993 4
24020 2022-02-23 2022T0931 xxxxx 1019 1994 4
14524 2022-02-23 2005T0631 1019 2005 3
我需要生成一个如下所示的表 C:
CALNO INDEXNO FILENO YEAR CALTYPE INDEXTYPE
--------- ------- ------ ---- ------- ---------
2022T0930 1019 1993 4
2022T0931 1019 1994 4
4038 1019 2003
4037 1019 2004
2005T0631 3586 1019 2005 3
2007 1019 2007
无论我怎么尝试,我在表C中得到12条记录。连接取表A的第一条记录并将其与表B中的每条记录匹配,生成3条记录到表C中。然后它取表的第二条记录A 并将其与表 B 中的每条记录进行匹配,从而在表 C 中生成另外 3 条记录。最后,当我只想要 7 条记录时,我在表 C 中得到了 12 条记录。
我在 MS SSM 2016 中运行我的脚本。
非常感谢有关如何设置的任何建议。
你可以这样做:
select
b.calno, a.indexno,
coalesce(a.fileno, b.fileno) as fileno,
coalesce(a.year, b.year) as year,
b.caltype, b.indextype
from a
full join b on b.year = a.year and b.fileno = a.fileno
order by coalesce(a.fileno, b.fileno), coalesce(a.year, b.year)
问题中行的顺序不明确,尤其是在存在多个
fileno
的情况下。