MS SQL - 我如何从一个表中提取数据以填充另一个表中的列

问题描述 投票:0回答:1

我有 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 中运行我的脚本。

非常感谢有关如何设置的任何建议。

sql sql-server ssms
1个回答
0
投票

你可以这样做:

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
的情况下。

© www.soinside.com 2019 - 2024. All rights reserved.