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