加入多个“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上有许多不同的部分,结果会不断变化,每次执行时生成的表格都会有所不同查询。 如果问题不清楚,我很抱歉,因为英语不是我的第一语言。
答
您正在寻找动态数据透视表和条件聚合。这是一个例子。
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 |
+----+----+----+
你好,你应该添加表结构,数据样本和预期的结果。 – Horaciux
我几乎100%确定光标在不必要的。你所做的基本上是使用循环多次获取值,现在你想将它们合并回一张表中。当然你可以使用'INSERT INTO EXEC ...',但是你可以使用简单的'INSERT INTO SELECT'。 – lad2025
我编辑了这个问题来添加表结构和预期的结果,谢谢Horaciux – Richard