(SQL)如何将两个列合并在一起以创建一个新列,然后将该表连接到另一个具有该新列的公共表

时间:2020-03-10 17:49:35

标签: sql sql-server

我想将Table_1中的两列合并在一起(即column_A和column_b并在各列之间添加“ |”),这将形成另一列column_c。然后,我想将Table_1中的column_c与Table_2中的column_c合并/合并。这些表在每个表中分别具有不同的列,我想返回所有数据-只有column_c是公共列。

我已经通过使用

合并了两列
Select (column_a + '|' + column_b) as column_c from Table_1

但是我很难与table_2中的column_c一起加入。

因此,查询[从trade_id ='45435'的交易中选择经纪人,帐户,trade_id,货币)将返回以下内容:

经纪人帐户trade_id货币 HSBC G-HG4_5 45435 EUR

和查询[从摘要中选择*,例如'G-HG4_5&'的代码将返回

开始日期结束日期代码描述代理类型 2015年5月25日2015年2月14日G-HG4_5 |欧元长贷方

我基本上想合并帐户和货币,使其看起来像第二张表中的“代码”列。合并后,我希望将它们全部放到一个表中,以便可以比较数据。

3 个答案:

答案 0 :(得分:1)

您可以直接在JOIN中使用合并列,方法是使用+运算符或Concat运算符进行混叠,如下所示:请尝试以下操作:

SELECT t1.column_a, t2.column_b, t2.column_c -- add either * or columns list of your choice here
FROM TABLE_2 t2
INNER JOIN t1 ON  t2.column_c = (ISNULL(t1.column_a, '') + '|' + ISNULL(t1.column_b, '')) -- t2.column_c = concat(t1.column_a, '|', t1.column_b)

侧面注::如果使用+进行连接,则将需要显式处理NULL值检查,因为将无法执行以下操作:

SELECT null + '|' + 'fun';
SELECT 'fun' + '|' + null;

答案 1 :(得分:0)

这听起来像是您要执行的操作:

SELECT * 
FROM TABLE_2 t2
INNER JOIN 
    (Select *, (column_a + '|' + column_b) as column_c from Table_1) t1
    ON t1.column_c = t2.column_c

答案 2 :(得分:0)

您可以在连接条件中直接使用串联:

SELECT a.*
FROM Table_1 a
INNER JOIN table_2 b
   ON CONCAT(a.column_a,'|',a.column_b)=b.column_c

希望这会有所帮助。