Sql server Sql server-存储过程-连接结果

Sql server Sql server-存储过程-连接结果,sql-server,stored-procedures,Sql Server,Stored Procedures,为了编制一份统计报告,我需要为每5000个机构和每5个州执行此类请求,因此25000个请求: select count(*) from transaction where state == 1 and where id_agency==1; select avg(duration) from transaction where state == 1 and where id_agency==1; 如何构建一个存储过程,将这些请求的所有结果收集到一个列表键值中 CountAgency1Count

为了编制一份统计报告,我需要为每5000个机构和每5个州执行此类请求,因此25000个请求:

select count(*) from transaction where state == 1 and where id_agency==1;
select avg(duration) from transaction where state == 1 and where id_agency==1;
如何构建一个存储过程,将这些请求的所有结果收集到一个列表键值中

CountAgency1CountState1 = 123;
CountAgency2CountState5 = 645;
CountAgency8AverageState7 = 987;
数据表结构:2个表:

表事务:
id\u事务、持续时间、状态、id代理


Table Agency:
idAgency,Address,city

实际上,假设您的数据,我们可以使用AVG()和GROUP by根据ID获取计数。这是一个示例,如果您提供准确的数据,我们可以获得更准确的输出

   CREATE table #T(ID INT,Value INT)
    INSERT INTO #T (ID,Value)values (1,10),(1,20),(1,30),(2,10),(2,20),(2,30)
    GO

    CREATE PROCEDURE Getaverage
    (@i_id INT)
    AS 
    BEGIN 
    select DISTINCT COUNT(ID) ,AVG(value),SUM(VALUE) from #T t
    WHERE (t.id = @i_id OR @i_id IS NULL)
    GROUP BY ID
    END

看起来你需要的是按ID和状态分组

SELECT ID_Agency
     ,State
     ,Count(*) [ID_Count]
     ,AVG(Duration) [Avg_Duration]
FROM Transaction 
group by ID_Agency
,State

这将为每个ID提供一行,并使用所需的2个值进行说明。

为什么不在一个查询中完成所有操作

SELECT 'CountAgency' + 
           CAST(idAgency as varchar) + 
           'CountState' + 
           CAST(state  as varchar) As Name
       ,CountAgency
       ,AvgDuration
FROM (
    SELECT idAgency
          ,state
          ,COUNT(*) As CountAgency
         ,AVG(T.Duration) As AvgDuration
FROM [Transaction] 
GROUP BY idAgency, state 
) InnerQuery

定义有问题的表结构,并输出示例为什么不
从交易组中按ID\u机构、状态
选择ID\u机构、状态、计数(*)[ID\u计数],平均(持续时间)[AVG\u持续时间]将ID\u机构、状态
编辑转换为下面的答案。确定;现在我需要执行这个查询5次,每个状态一次。是否可以执行2个查询并收集结果?@Erixx为什么要一次执行一个值?@Erixx在过程中,您可以通过哪个状态传递该ID并获取结果集?否则,如果希望全部通过0条件