首页 > 解决方案 > 在展开字段上连接表

问题描述

我有一张包含以下条目的表

表A

id|companyCode|AbroadCode|CompName
 1|       1234|        99|BallComp

和另一个表

表B

id|compCode|EmpName
 1|  991234|Peter
 2|  991234|Thomas
 3|    1234|Frank
 4|    1234|Marcus

问题是,对于表 A 中的每家公司,只有一个条目,如果该公司在国外有一个部门,它会在 AbroadCode 列中得到 99。在表 B 中,每个员工都有一个条目,但根据该人是否为外部部门工作而分开(展开)。我知道这应该以不同的方式设置,但我以这种方式继承了它,现在如果不做很多工作,我就无法改变结构。

我想要做的是我想加入表格。所以最后我会得到这个:

id|compCode|EmpName|Compname
 1|  991234|Peter  |BallComp
 2|  991234|Thomas |BallComp
 3|    1234|Frank  |BallComp
 4|    1234|Marcus |BallComp

谁能帮我解决这个问题?我能够通过两个不同的查询(compcode 和 Abroadcode 上的 concat())解决它,但不是在一个查询中。

标签: tsqljoin

解决方案


你可以试试这个:

声明的表变量中的一些示例数据

DECLARE @tblA TABLE(id INT,companyCode INT,AbroadCode INT,CompName VARCHAR(100));
INSERT INTO @tblA VALUES(1,1234,99,'BallComp')
                       ,(2,123,324,'Test') ;

DECLARE @tblB TABLE(id INT,compCode INT,EmpName VARCHAR(100));
INSERT INTO @tblB VALUES
 (1, 991234,'Peter')
,(2, 991234,'Thomas')
,(3,   1234,'Frank')
,(4,   1234,'Marcus')
,(5,    123,'Test1' )
,(6, 324123,'Test2' );

--查询

SELECT *
FROM @tblA a
INNER JOIN @tblB b ON b.compCode=a.companyCode 
                   OR b.compCode=CAST(CONCAT(a.AbroadCode,a.companyCode) AS INT);

简而言之:

  • 我们加入任何反对平等comp(any)Code...
  • ...或反对 AbroadCode 和 companyCode 的组合。

推荐阅读