将多个选择查询插入SQL Server中的表

时间:2015-01-17 11:32:48

标签: sql sql-server sql-insert

我有3个选择查询:

select 
    convert(varchar(50),(CONVERT(varchar(50), enq_id) + '/' + CONVERT(varchar(50), YEAR(fy_year)))) as EnqIDFyYear 
from 
    Sample.dbo.enquiry_details

select 
    A.profile_name 
from 
    profile_profile A, enquiry_details B 
where 
    A.profile_id = B.client_id

select 
    A.group_name 
from 
    mas_group_type A, enquiry_details B 
where 
    A.group_id = B.group_id

我创建了一个主表:

create table dbo.UltimateTable
(
    ColumnA varchar(max),
    ColumnB varchar(max),
    ColumnC varchar(max)
)

我想在上面的UltimateTable中插入以上3个选择查询作为其3列。

如何做到这一点?

我试了一下

insert into dbo.UltimateTable(ColumnA) 
   select 
      convert(varchar(50),(CONVERT(varchar(50), enq_id) + '/'  + CONVERT(varchar(50), YEAR(fy_year)))) as EnqIDFyYear 
   from 
      Sample.dbo.enquiry_details

但它允许我一次插入一个,ColumnA以外的值变为null。

如何一次插入所有3个SQL查询?

编辑:也许我应该更清楚地提出这个问题。以上3个选择查询的结果如下:

EnqIDFyYear
1/2015
2/2014

profile_name
ProfileA
ProfileB

group_name
GroupA
GroupB

我想将它们插入UltimateTable,如下所示:

EnqIDFyYear  profile_name  group_name
    1/2015   ProfileA      GroupA
    2/2014   ProfileB      GroupB

阿努拉格

2 个答案:

答案 0 :(得分:1)

如果您确实希望每个语句的每个结果行都有一列,则可以使用UNION功能:

insert into UltimateTable (Column A, Column B, Column C) 
select 
    convert(varchar(50),(CONVERT(varchar(50), enq_id) + '/' + CONVERT(varchar(50), YEAR(fy_year)))) as EnqIDFyYear, null, null
from 
    Sample.dbo.enquiry_details

UNION

select 
    null, A.profile_name, null
from 
    profile_profile A, enquiry_details B 
where 
    A.profile_id = B.client_id


UNION

select 
     null, null, A.group_name 
from 
    mas_group_type A, enquiry_details B 
where 
    A.group_id = B.group_id

如果要连接结果集,则应使用JOIN语法:

insert into UltimateTable (Column A, Column B, Column C) 
select 
    convert(varchar(50),(CONVERT(varchar(50),enq_id)+'/'+CONVERT(varchar(50),YEAR(fy_year)))), 
    P.profile_name, 
    G.group_name 
from Sample.dbo.enquiry_details D
join profile_profile P ON P.profile_id=D.client_id
JOIN mas_group_type G ON G.group_id=D.group_id

答案 1 :(得分:0)

insert into dbo.UltimateTable(ColumnA,ColumnB,ColumnC) 
values (select .., select .., select ..)

如果每个选择结果有多个值,则可以使用" STUFF" word将结果连接成单个varchar行。这已在Can I Comma Delimit Multiple Rows Into One Column?和更多问题中得到解答。