将多个 select 查询插入 SQL 服务器中的 table
Insert mutiple select queries into a table in SQL Server
我有 3 select 个查询:
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
我创建了一个大师table:
create table dbo.UltimateTable
(
ColumnA varchar(max),
ColumnB varchar(max),
ColumnC varchar(max)
)
我想在上面的 UltimateTable
中插入上面的 3 select 个查询作为它的 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 以外的值变为空值。
如何一次性插入所有 3 个 SQL 查询?
编辑:也许我应该把问题说得更清楚些。以上3次select查询结果如下:
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
阿努拉格
insert into dbo.UltimateTable(ColumnA,ColumnB,ColumnC)
values (select .., select .., select ..)
如果每个 select 结果有多个值,您可以使用 "STUFF" word 将结果连接成单个 varchar 行。这已在 Can I Comma Delimit Multiple Rows Into One Column? 和更多问题中得到解答。
如果您真的希望每条语句的每个结果行有一列,您可以使用 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
我有 3 select 个查询:
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
我创建了一个大师table:
create table dbo.UltimateTable
(
ColumnA varchar(max),
ColumnB varchar(max),
ColumnC varchar(max)
)
我想在上面的 UltimateTable
中插入上面的 3 select 个查询作为它的 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 以外的值变为空值。
如何一次性插入所有 3 个 SQL 查询?
编辑:也许我应该把问题说得更清楚些。以上3次select查询结果如下:
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
阿努拉格
insert into dbo.UltimateTable(ColumnA,ColumnB,ColumnC)
values (select .., select .., select ..)
如果每个 select 结果有多个值,您可以使用 "STUFF" word 将结果连接成单个 varchar 行。这已在 Can I Comma Delimit Multiple Rows Into One Column? 和更多问题中得到解答。
如果您真的希望每条语句的每个结果行有一列,您可以使用 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