我可以合并或加入这些表格吗?

时间:2018-09-13 06:06:44

标签: sql

我有一些表具有不同的列和值,但希望将它们合并/结合在一起

表格如下:

A
Datetime        ID  A   B   C   D
1/1/2018 00:00:00   1   11  22  33  44
2/1/2018 00:00:00   1   11  22  33  44
3/1/2018 00:00:00   1   11  22  33  44
4/1/2018 00:00:00   1   11  22  33  44
5/1/2018 00:00:00   1   11  22  33  44
6/1/2018 00:00:00   1   11  22  33  44


B
Datetime        ID  E   F   G   H
1/2/2018 00:00:00   2   101 212 313 414
2/2/2018 00:00:00   2   101 212 313 441
3/2/2018 00:00:00   2   101 212 313 414
4/2/2018 00:00:00   2   101 212 313 414
5/2/2018 00:00:00   2   101 212 313 441
6/2/2018 00:00:00   2   101 212 313 441


C
Datetime        ID  I   J   K   L
1/3/2018 00:00:00   3   11  22  33  44
2/3/2018 00:00:00   3   11  22  33  44
3/3/2018 00:00:00   3   11  22  33  44
4/3/2018 00:00:00   3   11  22  33  44
5/3/2018 00:00:00   3   11  22  33  44
6/3/2018 00:00:00   3   11  22  33  44

我希望我的决赛桌看起来像这样:

决赛A

Datetime        ID  A   B   C   D
1/1/2018 00:00:00   1   11  22  33  44
2/1/2018 00:00:00   1   11  22  33  44
3/1/2018 00:00:00   1   11  22  33  44
4/1/2018 00:00:00   1   11  22  33  44
5/1/2018 00:00:00   1   11  22  33  44
6/1/2018 00:00:00   1   11  22  33  44


B
Datetime        ID  E   F   G   H
1/2/2018 00:00:00   2   101 212 313 414
2/2/2018 00:00:00   2   101 212 313 441
3/2/2018 00:00:00   2   101 212 313 414
4/2/2018 00:00:00   2   101 212 313 414
5/2/2018 00:00:00   2   101 212 313 441
6/2/2018 00:00:00   2   101 212 313 441


C
Datetime        ID  I   J   K   L
1/3/2018 00:00:00   3   11  22  33  44
2/3/2018 00:00:00   3   11  22  33  44
3/3/2018 00:00:00   3   11  22  33  44
4/3/2018 00:00:00   3   11  22  33  44
5/3/2018 00:00:00   3   11  22  33  44
6/3/2018 00:00:00   3   11  22  33  44

最终

Datetime        ID  A   B   C   D   E   F   G   H   I   J   K   L
1/1/2018 00:00:00   1   11  22  33  44
2/1/2018 00:00:00   1   11  22  33  44
3/1/2018 00:00:00   1   11  22  33  44
4/1/2018 00:00:00   1   11  22  33  44
5/1/2018 00:00:00   1   11  22  33  44
6/1/2018 00:00:00   1   11  22  33  44
1/2/2018 00:00:00   2                   101 212 313 414
2/2/2018 00:00:00   2                   101 212 313 441
3/2/2018 00:00:00   2                   101 212 313 414
4/2/2018 00:00:00   2                   101 212 313 414
5/2/2018 00:00:00   2                   101 212 313 441
6/2/2018 00:00:00   2                   101 212 313 441
1/3/2018 00:00:00   3                                   11  22  33  44
2/3/2018 00:00:00   3                                   11  22  33  44
3/3/2018 00:00:00   3                                   11  22  33  44
4/3/2018 00:00:00   3                                   11  22  33  44
5/3/2018 00:00:00   3                                   11  22  33  44
6/3/2018 00:00:00   3                                   11  22  33  44

我想不出逻辑,因为每个表都有自己的列,但我希望按照上面的说明进行合并。

寻求建议。

3 个答案:

答案 0 :(得分:1)

我们可以通过联合查询来做到这一点:

SELECT Datetime, ID, A, B, C, D, NULL AS E, NULL AS F, NULL AS G, NULL AS H,
    NULL AS I, NULL AS J, NULL AS K, NULL AS L
FROM A
UNION ALL
SELECT Datetime, ID, NULL, NULL, NULL, NULL, E, F, G, H, NULL, NULL, NULL, NULL
FROM B
UNION ALL
SELECT Datetime, ID, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, I, J, K, L
FROM C
ORDER BY
    ID, Datetime;

enter image description here

Demo

注意:不需要 重复列别名,该列别名出现在后续选择中的联合查询的第一个选择中。实际上,此类别名只会被忽略。

由于易于设置,因此在SQL Server中任意给出了演示,但是查询应该在几乎所有数据库上运行。

答案 1 :(得分:0)

SELECT Datetime,ID,A,B,C,D,NULL AS E,NULL AS F,NULL AS G,NULL AS H,NULL AS I,NULL AS J,NULL AS K,NULL AS L
FROM TableA
UNION ALL
SELECT Datetime,ID,NULL AS A,NULL AS B,NULL AS C,NULL AS D, E,F,G,H,NULL AS I,NULL AS J,NULL AS K,NULL AS L
FROM TableB
UNION ALL
SELECT Datetime,ID,NULL AS A,NULL AS B,NULL AS C,NULL AS D,NULL AS AS E,NULL AS AS F,NULL AS G,NULL AS H,I,J,K,L
FROM TableC

答案 2 :(得分:0)

使用UNION ALL:

select Datetime,ID,  A,   B,   C,   D,   null as E,  null as F,   null as G,   null as H,   null as I,   null as J,   null as K,   null as L from tableA
union all
select Datetime,ID, null,   null ,  null ,  null ,    E,   F,   G,   H,   null ,   null ,   null ,   null  from tableB
Union all
select Datetime,ID,  null ,   null ,   null ,   null ,   null ,  null ,   null ,   H,   I,   J,   K,   L from tableC