Sql 服务器 - 存储过程 - 串联结果

Sql server - stored procedure - concatenated results

为了构建统计报告,我需要执行这种请求,每 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;

数据Table结构:2个表:

Table 交易:id_transac, duration, state, idAgency

Table 代理商:idAgency, adress, 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 和 State,其中包含您需要的 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