首页 > 解决方案 > 连接来自 SQL Server 中不同表的列

问题描述

我正在尝试从不同的表中选择列并创建一个新表,例如“test”。如果插入表中的“操作员”和“数据”列的输入:“忙碌”、“登录”无法从“Atendidas”表中找到相同列的输入,则显示 NULL。这可能很简单,但我无法真正到达那里。

我想要的是以下示例:

表附录:

ID   Ano         Mes             Data        Operador   Atendidas
1    2020    JANEIRO 2020     2020/01/01     CCTLT413        30
2    2020    JANEIRO 2020     2020/01/01     CCVTH2498       31
3    2020    JANEIRO 2020     2020/01/01     XKELB80         27
4    2020    JANEIRO 2020     2020/01/01     XKELI28         29
5    2020    JANEIRO 2020     2020/01/01     XKELN94         24

表忙:

ID  Ano        Mes             Data     Operador    Busy
1   2020    JANEIRO 2020    2020/01/01  CCTLT413    6812
2   2020    JANEIRO 2020    2020/01/01  CCTL200     3245
3   2020    JANEIRO 2020    2020/01/01  XKELB80     12305
4   2020    JANEIRO 2020    2020/01/01  XKELI28     7764
5   2020    JANEIRO 2020    2020/01/01  XKELN94     6014

表登录:

ID   Ano       Mes             Data     Operador    Login
1   2020    JANEIRO 2020    2020/01/01  CCTLT413    19475
2   2020    JANEIRO 2020    2020/01/01  CCVTH2498   20209
3   2020    JANEIRO 2020    2020/01/01  XKELB80     21625
4   2020    JANEIRO 2020    2020/01/01  XKELI28     21175
5   2020    JANEIRO 2020    2020/01/01  XKV220      22121

测试:

ID     Data         Operador     Atendidas     Busy      Login
1   2020/01/01      CCTLT413        30         6812      19475
2   2020/01/01      CCVTH2498       31         *NULL*    20209
3   2020/01/01      XKELB80         27         12305     21625
4   2020/01/01      XKELI28         29         7764      21175
5   2020/01/01      XKELN94         24         6014      *NULL*

解决方案:

这行得通,我必须离开加入我没有做的数据。:

SELECT A.Data, A.Operador, A.Atendidas, B.Busy, B.Login
  from Atendidas as A
       left join [Busy] as B on B.Operador = A.Operador
                                and B.Data = A.Data
       left join [Login] as L on L.Operador = A.Operador
                                 and L.Data = A.Data;

标签: sql-serverselectmultiple-columns

解决方案


使用联合连接表应该关联您可以从中选择的数据。这是假设每个表中没有重复项,然后可以使用 SUM 和 Group Bys 对其进行管理。

SELECT * FROM 
(
SELECT Id, Data, Operador, Atendidas, NULL Busy, NULL Login FROM Atendidas
UNION
SELECT Id, Data, Operador, NULL Atendidas, Busy, NULL Login FROM Busy
UNION
SELECT Id, Data, Operador, NULL Atendidas, NULL Busy,  Login FROM Login
)

您也可以尝试以下操作,这是假设 Id 相同,但您也可以加入 Operator 列。数据中有很多假设。

SELECT a.Id, a.Data, a.Operador, a.Atendidas, b.Busy, l.Login
FROM Atendidas a
INNER JOIN Busy b ON a.Id = b.Id
INNER JOIN Login l ON a.Id = l.Id

推荐阅读