使用存储过程和连接查询获取最大值

时间:2016-04-04 05:35:13

标签: sql-server stored-procedures

我使用db MS-Sql从我的stored procedure获取数据,并使用crystal report将其显示在sp.net中。它能做什么。 1.get sch_master表中的方案名称和方案代码 2.加入sch_detail表 3.内联接sch_releases表以获得每个特定方案代码的最后输入资本加上收入释放金额(Max(quarter_id))。这是stored procedure查询。

ssm.SchemeName, ssm.SchemeCode, 
        (Select ISNULL(SUM(distinct ra.CapitalRelaseAmount + ra.RevenueReleaseAmount),0) from Sch_Releases ra where QuarterID=(Select MAX(QuarterID) from Sch_Releases as ra where ra.YearID=@YearID)) AS Releases
        FROM           
        dbo.Sch_SchemeMaster  AS ssm  INNER JOIN
        dbo.Sch_SchemeDetail AS ssd ON ssd.SchemeCode = ssm.SchemeCode INNER JOIN
        dbo.Sch_Releases AS ra ON ra.SchemeCode = ssm.SchemeCode and ra.YearID=@YearID 
        WHERE ssd.YearID=@YearID 
        GROUP BY  ssm.SchemeName, ssm.SchemeCode
        HAVING    (ssd.IsCompleted = 0) AND (ssd.IsDeleted = 0)
        order by  ssm.SchemeCode

但不幸的是它从整个table获取最大输入值而不是与每个方案代码相关。请告诉我我的查询有什么问题。 谢谢

1 个答案:

答案 0 :(得分:1)

试试这个:

SELECT 
    ssm.SchemeName, 
    ssm.SchemeCode, 
    (Select ISNULL(SUM(ra.CapitalRelaseAmount + ra.RevenueReleaseAmount),0) from Sch_Releases ra where 
     ra.SchemeCode = ssd.SchemaCode AND ra.YearID = @YearId
     AND QuarterID=(Select MAX(QuarterID) from Sch_Releases as ra2 where ra2.SchemaCode = ra.SchemaCode and ra2.YearID=@YearID)
    ) AS Releases
FROM           
    dbo.Sch_SchemeMaster  AS ssm  INNER JOIN
    dbo.Sch_SchemeDetail AS ssd ON ssd.SchemeCode = ssm.SchemeCode 
WHERE 
    ssd.YearID=@YearID 
GROUP BY  ssm.SchemeName, ssm.SchemeCode
HAVING    (ssd.IsCompleted = 0) AND (ssd.IsDeleted = 0)
order by  ssm.SchemeCode