2016-01-24 131 views
0

我有一个存储过程从存储过程两个结果在MS SQL Server 2008 R2

CREATE PROCEDURE [dbo].[Sp_getdistrictreport] 
    -- Add the parameters for the stored procedure here 
    @DistrictName NVARCHAR(50) 
AS 
    BEGIN 
     -- SET NOCOUNT ON added to prevent extra result sets from 
     -- interfering with SELECT statements. 
     SET nocount ON; 

    -- Insert statements for procedure here 
    SELECT a.talukname, 
     Count (DISTINCT b.globalid) AS Samples_Collected 
    FROM dbo.village a WITH (INDEX ([S22_idx])) 
     INNER JOIN dbo.gridpoint_1 b 
       ON a.shape.Stintersects(b.shape) = 1 
     INNER JOIN dbo.gridpoint_1__attach c 
       ON b.globalid = c.rel_globalid 
    WHERE districtname = @DistrictName 
    GROUP BY a.talukname 
END 

这将导致

TalukName    Samples_Collected 
Heggadadevankote  | 1 
Hunsur     | 6 
Krishnarajanagara  | 4 
Mysore     | 4 
Tirumakudal - Narsipur | 1 

但我想多一个列到这个结果(Total_SAMPLE ),它从第一个INNER JOIN获得的数据与STintersect的结果。请帮我修改存储过程。

+0

也许只添加'COUNT(*)OVER()AS TotalSample'? –

+0

您可以添加示例输出/预期输出 – TheGameiswar

回答

0

我得到了答案,但它需要7.05分钟的结果。任何人都可以帮助改善执行时间或任何其他方法。

PROCEDURE [dbo].[sp_GetDistrictReportForDashboard] 
    -- Add the parameters for the stored procedure here 
    @DistrictName nvarchar(50) 
AS 
BEGIN 

SET NOCOUNT ON; 

SELECT samples_collected.talukname,sample_count,TotalSamples from 
(
SELECT a.TalukName talukname, COUNT (DISTINCT b.GlobalID) sample_count 
FROM dbo.VILLAGE a WITH (INDEX ([S22_idx])) , DBO.GRIDPOINT_1 b , dbo.GRIDPOINT_1__ATTACH c 
WHERE a.SHAPE.STIntersects(b.Shape)=1 
and b.GlobalID=c.REL_GLOBALID 
and [email protected] 
GROUP BY a.TalukName 
) samples_collected, 
(
SELECT a.TalukName talukname,COUNT (DISTINCT b.GlobalID) TotalSamples 
FROM dbo.VILLAGE a 
INNER JOIN 
dbo.GRIDPOINT_1 b WITH (INDEX ([S26_idx])) ON a.SHAPE.STIntersects(b.Shape)=1 
WHERE [email protected] 
GROUP BY a.TalukName 
) total 
WHERE samples_collected.talukname=total.talukname 

END 

结果

talukname     sample_count TotalSamples 
Heggadadevankote   |  1 |  55001 
Hunsur      |  6 |  31316 
Krishnarajanagara   |  4 |  34297 
Mysore      |  4 |  18168 
Tirumakudal - Narsipur  |  1 |  38668 
+0

请帮助我改进查询的性能 – user3210732

相关问题