加入多个“exec”作为一个输出SQL服务器

问题描述:

我正在使用SQL Server从一个动态exec获取多个结果作为单个输出中的一个表的列,现在exec让我有多个输出作为不同的时间表。加入多个“exec”作为一个输出SQL服务器

有没有办法将它们合并在一起并获得单个输出?

这是我的代码:

Declare @status nvarchar(255) 
Declare POINTER cursor global for select distinct status from intermedio 
open POINTER 
fetch NEXT from POINTER into @status 
while (@@FETCH_STATUS=0) 
begin 
exec('select distinct(
Select COUNT(*) from (
SELECT DISTINCT PKN 
FROM INTERMEDIO 
WHERE PIECE IN ('+'''+891''','''+75'''+') and ESTATUS = '''[email protected]+''' 
group by PKN 
having count(*)=2 
) ser) as '[email protected]); 
fetch next from POINTER into @status 
end; 
close POINTER; 
DEALLOCATE POINTER; 

编辑:试图更好地解释自己,再次请原谅我的英语很差。 我的表有三列

+-----------+-------+---------+ 
| PKN | PIECE | ESTATUS | 
+-----------+-------+---------+ 
| Set_one | +891 | A1  | 
| Set_one | +75 | A1  | 
| Set_one | +45 | A1  | 
| Set_two | +891 | A3  | 
| Set_two | +75 | A3  | 
| Set_three | +700 | B1  | 
+-----------+-------+---------+ 

我试图让兼得(891,+75)的PKNs的计数和计数存在多少ESTATUS

我输出期待是这样的:

+----+----+----+ 
| A1 | A3 | B1 | 
+----+----+----+ 
| 1 | 1 | 0 | 
+----+----+----+ 

但它给了我不同表上的行。

我这样做的原因是因为表格可能随时有许多不同的ESTATUS,并且在不同的PKN上有许多不同的部分,结果会不断变化,每次执行时生成的表格都会有所不同查询。 如果问题不清楚,我很抱歉,因为英语不是我的第一语言。

+1

你好,你应该添加表结构,数据样本和预期的结果。 – Horaciux

+3

我几乎100%确定光标在不必要的。你所做的基本上是使用循环多次获取值,现在你想将它们合并回一张表中。当然你可以使用'INSERT INTO EXEC ...',但是你可以使用简单的'INSERT INTO SELECT'。 – lad2025

+1

我编辑了这个问题来添加表结构和预期的结果,谢谢Horaciux – Richard

您正在寻找动态数据透视表和条件聚合。这是一个例子。

create table #tempTable (PKN varchar(64), PIECE varchar(64), ESTATUS varchar(2)) 

insert into #tempTable 
values 
('Set_one','+891','A1'),  
('Set_one','+75','A1'),  
('Set_one','+45','A1'),  
('Set_two','+891','A3'),  
('Set_two','+75','A3'),  
('Set_three','+700','B1')  

select 
    ESTATUS 
    --here is the conditional aggregation 
    ,floor(count(case when PIECE = '+891' or PIECE = '+75' then PKN end)/2) as CT 
into #staging 
from 
    #tempTable 
group by ESTATUS 

DECLARE @DynamicPivotQuery AS NVARCHAR(MAX) 
DECLARE @ColumnName AS NVARCHAR(MAX) 

--Get distinct values of the PIVOT Column 
SELECT @ColumnName= ISNULL(@ColumnName + ',','') 
     + QUOTENAME(ESTATUS) 
FROM (SELECT DISTINCT ESTATUS FROM #staging) AS ESTATUS 

--Prepare the PIVOT query using the dynamic 
SET @DynamicPivotQuery = 
    N'SELECT ' + @ColumnName + ' 
    FROM #staging 
    PIVOT(Sum(CT) 
      FOR ESTATUS IN (' + @ColumnName + ')) AS PVTTable' 
--Execute the Dynamic Pivot Query 
EXEC sp_executesql @DynamicPivotQuery 

drop table #tempTable 
drop table #staging 

退货

+----+----+----+ 
| A1 | A3 | B1 | 
+----+----+----+ 
| 1 | 1 | 0 | 
+----+----+----+ 
+1

这让我更接近于以前的答案,我设法使用类似于您的代码的方式来做到这一点,不同之处在于我需要检查PKN是否在桌面上重复使用,如果它与只有一个或另一个,它不算。总之你帮了我很多,谢谢。 – Richard

+0

很高兴帮助@Richard – scsimon