Group By存储过程错误

时间:2011-05-11 15:31:06

标签: sql-server-2008 stored-procedures

我创建了这个存储过程,它基本上是返回一个办公室列表,其中包含每个办公室内发生的活动类型。我向reportviewer报告的结果,但我注意到,对于每个活动返回它创建一个表 - 所以我可以有5个不同的表,每个表都有自己的活动,但都发生在同一个办公室。我希望报告能够成为每个办公室的一个表格,其中包含与每个办公室一样多的活动。所以我认为,如果我在我的存储过程中分组,我的结果将是我想要的但我得到列错误说:“...在选择列表中无效,因为它不包含在聚合函数或GROUP中BY条款。“

我不知道该如何解决这个问题,但这是我的选择,来自,何处,分组声明:

SELECT 
            O.OfficeId,
            O.OfficeName AS Office,
            HT.Description AS HearingType,
            H.HearingDate AS HearingDate,
            CR.Description AS Court,
            CT.[Description]AS CaseType
    FROM Activity H
    INNER JOIN ActivityEntry HE ON H.ActivityEntryId = HE.ActivityEntryId
    INNER JOIN ActivityType HT ON H.ActivityTypeId = HT.ActivityTypeId
    INNER JOIN [Case] C ON H.CaseId = C.CaseId
    INNER JOIN [Office] O ON HE.CreatedByOfficeId = O.OfficeId
    INNER JOIN [User] U ON C.CreatedByUserId = U.UserId
    LEFT OUTER JOIN CaseType CT ON C.CaseTypeId = CT.CaseTypeId
    LEFT OUTER JOIN Court CR ON C.CourtId = CR.CourtId
    WHERE .dbo.DateOnly(HE.HearingDate)BETWEEN @BeginDate AND @EndDate
    GROUP  BY
            O.OfficeId,
            O.OfficeName,
            HT.Description
    ORDER BY O.OfficeId, HT.Description

3 个答案:

答案 0 :(得分:1)

您没有使用任何聚合函数(乍一看),因此您不需要group by子句。您可以在order by中完成所有排序,然后在应用程序端处理它时将其提取到不同的数据集中。

示例:

select ... from ... order by OfficeID, Description

这会为所有办公室返回单个结果。现在你需要在代码中解析它

int OfficeID=-1;
while(recordset.moveToNextRow())
{
    if(currentRecord.OfficeID!=OfficeID)
    {
        //This is a new office, do whatever you need to do to split the data up here
        OfficeID=currentRecord.OfficeID;
    }
    //Process the record as a part of the current office here
}

因此,如果您在网页上构建表格,您可能会在每次点击新办公室ID时结束最后一个表格并开始新表格。这里有一些你需要的额外逻辑,但这应该给你一个想法。

请注意,您的问题与使用存储过程无关,而与您选择和处理数据的方式无关。

答案 1 :(得分:1)

GROUP BY要求您在列表列表中添加某种聚合函数 - SUMAVGCOUNTGROUP BY只有与汇总相结合才有意义。

否则,只需使用ORDER BY语句订购数据。

答案 2 :(得分:0)

我实际上意识到我的问题无法通过某些成员提到的存储过程来解决。由于我在报告中显示结果,因此我重新组织了我的报告和数据集信息,以便存在父子关系,并且从数据集中我的信息被正确组织。我使用了这篇文章提供的解决方案来帮助指导我:post used to help guide me.