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列,以此类推 我试着这么做: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
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