Sql 如何在不获取重复列的情况下执行“选择入”操作?

Sql 如何在不获取重复列的情况下执行“选择入”操作?,sql,Sql,假设a表中有200列,B表中有200列,C表中有200列,D表中有200列,E表中有200列,F表中有200列,G表中有200列 现在假设其中190列在每个表中都有相同的名称,但其他10列在每个表中都不同 如何创建一个新表,该表有250列190,这是所有表共有的+表a中的其他10列+表B中的其他10列+表C中的其他10列,以此类推 我试着这么做: select Top 1 * into Master_Table from vw_A cross join vw_B cross join vw_C

假设a表中有200列,B表中有200列,C表中有200列,D表中有200列,E表中有200列,F表中有200列,G表中有200列

现在假设其中190列在每个表中都有相同的名称,但其他10列在每个表中都不同

如何创建一个新表,该表有250列190,这是所有表共有的+表a中的其他10列+表B中的其他10列+表C中的其他10列,以此类推

我试着这么做:

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.
您需要使用动态sql plus信息_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 
您可以在SELECT子句中包含一个表vw_A.*的所有列,并从其他表中仅包含vw_A定义中未出现的列:


抱歉,您必须写出列名或使用动态sql…谢谢,但我在每个字段上都会遇到此错误。-Msg 4104,16级,状态1,第1行多部分标识符CustomerVehicleID.vw_A无法绑定。Msg 4104,级别16,状态1,第1行无法绑定多部件标识符CustomerID.vw_A。Msg 4104,第16级,状态1,行1@user3442990-现在再试一次出现错误现在我再次得到原始错误--Msg 2705,级别16,状态3,每个表中的第1行列名必须唯一。表“Master_table”中的列名“CustomerVehicleID”被多次指定。@user3442990-无法添加rn=1的筛选器。问题是我没有SSM来验证查询。现在试试
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