假设我在表A中有200列,表B中有200列,表C中有200列,表D中有200列,表E中有200列,表F中有200列,表G中有200列< / p>
现在说这些列中有190个在每个表中都有相同的名称,但其他10个表对于每个表都不同。
如何创建一个包含250列的新表(190表示所有表共有的表+表A中的10列其他列+表B中的其他10列以及其他10列中的列表C等)?
我试图这样做:
select Top 1 * into Master_Table
from vw_A
cross join vw_B
cross join vw_C
cross join vw_D
cross join vw_E
cross join vw_F
cross join vw_G
但是我收到了这个错误:
Column names in each table must be unique. Column name 'CustomerVehicleID' in table 'Master_Table' is specified more than once.
答案 0 :(得分:0)
您需要Dynamic sql
加information_schema.column
才能获得不同的列列表。像这样的东西。
DECLARE @cols VARCHAR(max)='',
@sql NVARCHAR(max)
SELECT @cols += column_name + ','
FROM (SELECT Row_number()OVER(partition BY column_name ORDER BY (SELECT NULL)) rn,
TABLE_NAME+'.'+COLUMN_NAME AS Column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME IN ( 'vw_A', 'vw_B', 'vw_C', 'vw_D',
'vw_E', 'vw_F', 'vw_G' )) a
where rn=1
SELECT @cols = LEFT(@cols, Len(@cols) - 1)
SET @sql ='select Top 1 ' + @cols + ' into Master_Table
from vw_A
cross join vw_B
cross join vw_C
cross join vw_D
cross join vw_E
cross join vw_F
cross join vw_G'
exec sp_executesql @sql
答案 1 :(得分:0)
您可以在SELECT
子句中包含一个表(vw_A.*
)的所有列,而在其他表中只包含未出现在vw_A
定义中的列:< / p>
select Top 1 vw_A.*,
# columns of vw_B that do not exist in vw_A
colB1, colB2, colB3, colB4,
# columns of vw_C that do not exist in vw_A
colC1, colC2, colC3, colC4,
# columns of vw_D that do not exist in vw_A
colD1, colD2, colD3, colD4,
#
# and so on
#
into Master_Table
from vw_A
cross join vw_B
cross join vw_C
cross join vw_D
cross join vw_E
cross join vw_F
cross join vw_G