入世对具有不同名称的列的表,但产生的结果单列(Joining tables on columns w

2019-10-16 17:17发布

我不知道如何简明制定问题来形容一个问题,我想解决的问题。
我有两个下表:
Table 1

[idA] [numA]
 NULL   8
 1      10
 2      15
 3      16

Table 2

[idB] [numB]
 2      14
 3      30
 4      32

现在,我不知道如何制定的T-SQL查询产生以下结果:

[id] [numA] [numB]
NULL  8      0
1     10     0
2     15     14
3     16     30
4     0      32

有没有对如何解决这个有什么建议?

更新:


会不会有与@ AdaTheDev的剧本任何问题,如果有一个以上的表(IDC,NUMC)加入? 在这种情况下,这将是最好的解决办法? 事情是我有他们的15加入到一个表,他们应该通过ID和分组有15个对应的numX列。

Answer 1:

像这样的东西,应该这样做

SELECT ISNULL(t1.idA, t2.idB) AS id, 
    ISNULL(t1.numA, 0) AS numA, 
    ISNULL(t2.NumB, 0) AS numB
FROM table1 t1
    FULL OUTER JOIN table2 t2 ON t1.idA = t2.idB OR t1.ida IS NULL AND t2.idb IS NULL

更新
注意:我已经添加OR条件的加入来处理情况,IDA和美洲开发银行是空的情况下,给一个结果

全部测试脚本(在表2中添加NULL ID记录):

DECLARE @Table1 TABLE (ida integer, numA INTEGER)
DECLARE @Table2 TABLE (idb integer, numb INTEGER)

INSERT @Table1 ([ida], [numA])
VALUES (NULL, 8), (1, 10), (2, 15), (3, 16)

INSERT @Table2 ([idb], [numb])
VALUES (NULL, 9), (2, 14), (3, 30), (4, 32)

SELECT ISNULL(t1.idA, t2.idB) AS id, 
    ISNULL(t1.numA, 0) AS numA, 
    ISNULL(t2.NumB, 0) AS numB
FROM @table1 t1
    FULL OUTER JOIN @table2 t2 ON t1.idA = t2.idB OR t1.ida IS NULL AND t2.idb IS NULL


Answer 2:

DECLARE @table1 AS TABLE (idA INT, numA INT)
DECLARE @table2 AS TABLE (idB INT, numB INT)

INSERT INTO @table1
VALUES 
(NULL, 8),
(1, 10),
(2, 15),
(3, 16)

INSERT INTO @table2
VALUES
(2, 14),
(3, 30),
(4, 32)


SELECT COALESCE(ida, idb) AS id, ISNULL(numa, 0) AS numa, ISNULL(numb, 0) AS numb
FROM @table1
FULL OUTER JOIN @table2 ON ida = idb


Answer 3:

这是你以后?

select tableA.idA as Id, tableA.numA as numA, tableB.numB as numB
from tableA
inner join tableB on tableA.Id = tableB.Id


文章来源: Joining tables on columns with different names but produce single column in result