Sql server 将具有不同列的多个表合并到一个表中

Sql server 将具有不同列的多个表合并到一个表中,sql-server,ddl,Sql Server,Ddl,我有4个表,每个表包含不同的数据和不同的列标题名。我想创建一个新表,将所有数据和所有列包含在一个新表中。 注意:我正在尝试将记录选择到单个结果中。任何表之间都没有关系。每个表都从其他地方收集数据。我正在尝试将这些表合并成1,这样我就可以训练一个机器学习模型。这有用吗?如果您需要更多信息,请告诉我。谢谢 谢谢你的帮助 TABLE [db_ddladmin].[PS_sec_1]( [id] [int] IDENTITY(1,1) NOT NULL, [session_id] [va

我有4个表,每个表包含不同的数据和不同的列标题名。我想创建一个新表,将所有数据和所有列包含在一个新表中。 注意:我正在尝试将记录选择到单个结果中。任何表之间都没有关系。每个表都从其他地方收集数据。我正在尝试将这些表合并成1,这样我就可以训练一个机器学习模型。这有用吗?如果您需要更多信息,请告诉我。谢谢 谢谢你的帮助

TABLE [db_ddladmin].[PS_sec_1](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [session_id] [varchar](90) NULL,
    [Age] [varchar](750) NULL,
    [Religious] [varchar](50) NULL,
    [Marital] [varchar](50) NULL,
    [Sex] [varchar](50) NULL,
    [Ethnicity] [varchar](50) NULL,
    [Country] [varchar](50) NULL,
    [Education] [varchar](50) NULL,
    [Zipcode] [varchar](50) NULL,
    [Fist_name] [varchar](50) NULL,
    [flag] [char](10) NULL,
    [timdat] [datetime] NULL
) ON [PRIMARY]


TABLE [db_ddladmin].[PS_sec_2](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [session_id] [varchar](90) NULL,
    [Height] [varchar](750) NULL,
    [Weight] [varchar](50) NULL,
    [Body_type] [varchar](50) NULL,
    [eye] [int] NULL,
    [ear] [int] NULL,
    [nose] [int] NULL,
    [lip] [int] NULL,
    [toung] [int] NULL,
    [nippel] [int] NULL,
    [belly] [int] NULL,
    [clit] [int] NULL,
    [face] [int] NULL,
    [neck] [int] NULL,
    [shoulder] [int] NULL,
    [chest] [int] NULL,
    [back] [int] NULL,
    [ribs] [int] NULL,
    [stomach] [int] NULL,
    [arms] [int] NULL,
    [hand] [int] NULL,
    [thigh] [int] NULL,
    [calf] [int] NULL,
    [foot] [int] NULL,
    [flag] [char](10) NULL,
    [timdat] [datetime] NULL
) ON [PRIMARY]

假设现有表是table1、table2、table3和table4,也假设新表名为tablenew

SELECT * 
INTO   tablenew 
FROM   (SELECT col1, 
               col2, 
               col3 
        FROM   table1 
        UNION ALL 
        SELECT col1, 
               col2, 
               col3 
        FROM   table2 
        UNION ALL 
        SELECT col1, 
               col2, 
               NULL AS Col3 
        FROM   table3) 
你可以使用交叉连接,但这将是一个沉船…我希望这是你想要的

SELECT * from [db_ddladmin].[PS_sec_1]
CROSS JOIN [db_ddladmin].[PS_sec_2];

为了便于讨论,假设有两个表,表A和表B。我创建了一个示例数据来说明解决方案:

表a详情:

表B详情:

工会声明:


工会声明应该给出你想要的结果,但是要达到这个结果需要一些体力劳动。希望这能有所帮助。

James,我们能得到一些文本数据和这些表的模式吗?创建新表的具体含义是什么?您是否永久性地更改了方案的结构,并希望将数据迁移到新结构?您是否出于某种原因试图复制数据?您是否正在尝试将视图创建为一种可以从中选择的虚拟表?您只是在尝试将记录选择到单个结果中吗?数据是如何关联的?当前数据是什么?结果应该是什么?你试过什么,什么不起作用?我更新了帖子。我刚才提到了两张桌子,因为我不想太长。汉克斯,我更新了帖子。嗨,瑞秋,很不幸,没用。它创建了一个新表,但只包含第一个表的三列。我需要一个包含所有三个表中所有列的表。谢谢你,我想你指的是UNION语句而不是JOIN语句。是的…我编辑了…我编辑了答案…谢谢你指出它。选择*进入表格新建自以创建表格
CREATE TABLE #tableA (ID Int, Name Varchar(10))
INSERT INTO #tableA VALUES (1,'John'),(2,'James')
CREATE TABLE #tableB (City Varchar(10), Country Varchar(10))
INSERT INTO #tableB VALUES ('Paris','France'),('NY','USA')
select ID,Name,NULL as City,NULL as Country from #tableA
UNION ALL
select NULL as ID,NULL as Name,City,Country from #tableB