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

时间:2015-06-08 10:23:23

标签: sql-server stored-procedures

为了建立一个统计报告,我需要为每5000个机构和每个5个州执行这种请求,因此需要25 000个请求:

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_transac, duration, state, idAgency

表机构:idAgency, adress, city

3 个答案:

答案 0 :(得分:1)

实际上通过假设您的数据我们可以继续使用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

答案 1 :(得分:1)

您似乎需要按ID和状态分组

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

这将为每个ID提供一行,并为您提供所需的2个值。

答案 2 :(得分:0)

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

a = [1, 0, 2]
a1 = id(a[0])

b = sorted(a)
b1 = id(b[1])

print a1 == b1
>>>True