首页 > 解决方案 > 我可以合并或加入这些表吗?

问题描述

我有一些表具有不同的列和值,但想将它们合并/连接在一起

表格如下所示:

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
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

我想不出每个表都有自己的列的逻辑,但我希望它按照上面的方式合并。

寻求您的建议。

标签: sql

解决方案


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

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;

在此处输入图像描述

演示

注意:没有必要在后续选择中重复出现在联合查询的第一个选择中的列别名。事实上,这样的别名将被忽略。

由于易于设置,在 SQL Server 中任意给出了演示,但查询几乎可以在任何数据库上运行。


推荐阅读