0

我有 3 个存储过程,它们从通过键链接的(spData1, spData2, spData3)两个表中查询区域汇总结果。由于所需摘要信息的连接方法和 GROUP BY 要求不同,我无法组合查询。每个存储过程都需要一个参数来表示他们想要汇总信息的年份。为了让事情变得非常有趣,这些程序并不总是返回相同数量的记录,具体取决于年份。(tSites, tInspections)SiteID@Year (smallint)

  1. spData1 返回 RegionName、TotalSitesVisited 和 TotalViolations
  2. spData2 返回 RegionName 和 TotalSiteVisits
  3. spData3 返回 RegionName 和 TotalBadSites

如何创建第四个存储过程以在一个结果中返回所有这些信息:

spData4返回RegionName, TotalSitesVisited, TotalViolations, TotalSiteVisits, TotalBadSites

谢谢!

4

1 回答 1

0

在您的过程 (spData4) 开始时,创建三个临时表,它们对应于三个存储过程的输出列。

使用运行所有 3 个 spsINSERT..EXEC并将数据插入到 3 个临时表中。

最后编写一个查询,加入 3 个临时表的结果并将其作为 SELECT 从过程返回

像这样的东西(修复正确的列类型):

CREATE PROCEDURE spData4 (@Year smallint)
AS
BEGIN

 CREATE TABLE #temp1 (RegionName NVARCHAR(50), TotalSitesVisited INT, TotalViolations INT)
 CREATE TABLE #temp2 (RegionName NVARCHAR(50), TotalSiteVisits INT)
 CREATE TABLE #temp3 (RegionName NVARCHAR(50), TotalBadSites INT)

 INSERT INTO #temp1 EXEC spData1 @Year
 INSERT INTO #temp2 EXEC spData2 @Year
 INSERT INTO #temp3 EXEC spData3 @Year

 SELECT 
  COALESCE(t1.RegionName, t2.RegionName, t3.RegionName) RegionName
  ,TotalSitesVisited,TotalViolations,TotalSiteVisits,TotalBadSites 
 FROM #temp1 t1
 FULL JOIN #temp2 t2 ON t1.RegionName = t2.RegionName 
 FULL JOIN #temp3 t3 ON t1.RegionName = t3.RegionName OR t2.RegionName = t3.RegionName

END 

或者,如果您不再需要旧的 SP,您可以在此处从所有三个 SP 复制您的代码,并将其作为三个单独的部分,每个部分填充它自己的 #temp 表。最后以同样的方式加入。

于 2013-07-26T15:03:42.783 回答