Sql 在单个查询中使用多个select语句并将结果显示为新行

Sql 在单个查询中使用多个select语句并将结果显示为新行,sql,sql-server,sql-server-2008,ssms,Sql,Sql Server,Sql Server 2008,Ssms,我想创建一个查询,返回查询中某些select语句参数的总和,并创建一个包含新行的新结果表,这是从select语句派生的结果,如下所示 这是我的桌子 我希望结果如下所示,其中Col4是具有第2、3和5行的select语句的结果,第5列是对col值的计算结果,如下所示 结果如下所示。在MS SQL SERVER中是否可以这样做。 合并行的逻辑是什么?根据标准将行合并到组中。假设第112、113和115行是一个组的一部分。同样,其他人也分为不同的群体。“根据标准”什么标准?它是从哪里来的?你唯

我想创建一个查询,返回查询中某些select语句参数的总和,并创建一个包含新行的新结果表,这是从select语句派生的结果,如下所示

这是我的桌子

我希望结果如下所示,其中Col4是具有第2、3和5行的select语句的结果,第5列是对col值的计算结果,如下所示

结果如下所示。在MS SQL SERVER中是否可以这样做。


合并行的逻辑是什么?根据标准将行合并到组中。假设第112、113和115行是一个组的一部分。同样,其他人也分为不同的群体。“根据标准”什么标准?它是从哪里来的?你唯一问的问题是这是否可能。是的,这是可能的。因为你可能需要更多的帮助,我建议你在这里解释一下你的逻辑。你看,这里的查询将非常简单。但除非你能解释这些数据是如何分组的,否则没有人能帮你。问题是没有固定的逻辑。对于第一个选项,我必须将col1中的3个项目分组,而在另一个选项中,我必须将col1中的4个或1个项目分组。这不是固定的,我必须手动为主查询中的每个select使用select语句。可能是示例中三个col1项的用法令人困惑。合并行的逻辑是什么?行根据条件合并为组。假设第112、113和115行是一个组的一部分。同样,其他人也分为不同的群体。“根据标准”什么标准?它是从哪里来的?你唯一问的问题是这是否可能。是的,这是可能的。因为你可能需要更多的帮助,我建议你在这里解释一下你的逻辑。你看,这里的查询将非常简单。但除非你能解释这些数据是如何分组的,否则没有人能帮你。问题是没有固定的逻辑。对于第一个选项,我必须将col1中的3个项目分组,而在另一个选项中,我必须将col1中的4个或1个项目分组。这不是固定的,我必须手动为主查询中的每个select使用select语句。可能是示例中三个col1项的用法令人困惑。
--http://sqlfiddle.com/#!18/87a6f/4
--Schema
create  table mytable(col1 int,col2 int,col3 int,col4 int)
insert into mytable values
(111,1,0,4),
(112,3,1,2),
(113,1,2,2),
(114,2,4,3),
(115,3,1,0),
(116,1,0,2),
(117,2,1,0),
(118,4,1,3),
(119,3,2,1)
create table  tabscript (col4 varchar(max),col5 varchar(max))
create table  tabresult(col4 varchar(max),col5 int)


--Put here th scripts you wish to execute

insert into tabscript(col4,col5) values('112,113,115','sum(col2+col3+col4)'),
('115,117,119','sum(col2+col3+col4)'),('114,118,111','sum(col2+col3+col4)')


--Kamel Gazzah
--kamelgazzah@gmail.com
--29/10/2019
declare @script as varchar(max)
declare @sqlCommand as nvarchar(max)
declare @result as int
declare mycursor  cursor for
select concat('select @result=',col5, ' from mytable where col1 in(',col4,')') 
from tabscript 
open mycursor
declare @sql as nvarchar(max)
fetch mycursor into @sqlCommand
while @@fetch_status=0
begin
--print @sql
--print @sqlCommand
exec sp_executesql @sqlCommand,N'@result int output',@result output
insert into tabresult values(@sqlcommand,@result)

fetch mycursor into @sqlCommand
end
close mycursor
deallocate mycursor
go
select * from tabresult