我有一些表格,其中的数据是在一年中的不同时间段输入的。虽然相似,但这些表在每个季度具有不同的列数。我知道,如果我想联合两个具有不同列数的表,解决方案就是将额外的列数添加为空列。
然而,在本例中,我有超过22个表,每个表都有4个需要联合的版本。例如,TableA_Q1联合TableA_Q2联合TableA_Q3联合TableA_Q4,然后对TableB_Q1联合TableB_Q2重复相同的过程,依此类推。
现在,我正在对每个表的4个季度进行intersect,然后开始使用excel来识别其余的列,但必须有一种更简单的方法来完成此操作。有什么想法吗?
发布于 2018-03-23 23:04:55
您可以使用sys.columns和sys.tables来构建动态sql,并根据需要添加空值。
发布于 2018-03-23 23:20:12
当没有对应的列时,只需添加null即可追加select
数据类型也必须对应,例如:
select col1, col2, col3, col4
from TableA_Q1
UNION
select col1, col2, null,null
from TableA_Q2
select col1, col2, col5,null
from TableA_Q3
union
select col1,null, col5,null
from TableA_Q4可以使用union如果要删除重复的行,可以使用UNION ..otherwise选择所有行
发布于 2018-03-23 23:11:22
您可以使用join来做到这一点。就像select * from TableAQ1 join TableAQ2 on condition一样。有不同类型的连接(left、right、outter..)但我想你想要外边的那个。
columnName : condition is TableAQ1.calumnName = TableAQ2.columnName,其中Edit是以某种方式与表中的信息相关的列。对不起,我不能用英语很好地解释我自己。
https://stackoverflow.com/questions/49452711
复制相似问题