Group By в хранимой процедуре ошибка - PullRequest
1 голос
/ 11 мая 2011

Я создал эту хранимую процедуру, которая в основном возвращает список офисов с типом действий, которые происходят в каждом офисе. Результаты, о которых я сообщил отчет-наблюдателю, но я заметил, что для каждого возврата активности создается таблица - поэтому я могу иметь 5 разных таблиц, каждая из которых имеет свою активность, но все они происходят в одном и том же офисе. Я хочу, чтобы отчет представлял собой таблицу для каждого офиса, которая будет содержать столько мероприятий, сколько есть для каждого офиса. Поэтому я подумал, что если я сгруппировал в своей хранимой процедуре, мои результаты будут такими, как я хочу, но я получаю сообщение об ошибке столбца, говорящее: «... неверно в списке выбора, потому что он не содержится ни в статистической функции, ни в GROUP BY 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 ]

1 голос
/ 11 мая 2011

GROUP BY требует, чтобы в вашем списке столбцов была какая-то агрегатная функция - SUM, AVG, COUNT. GROUP BY имеет смысл только в сочетании с совокупностью.

В противном случае просто упорядочите данные с помощью оператора ORDER BY.

1 голос
/ 11 мая 2011

Вы не используете никаких агрегатных функций (во всяком случае, на первый взгляд), поэтому вам не нужно предложение 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
}

Так что, если бы вы строили таблицу на веб-странице, вы могли бы закончить последнюю таблицу и начинать новую таблицу каждый раз, когда вы нажимаете новый идентификатор офиса. Здесь вам понадобится дополнительная логика, но она должна дать вам представление.

Обратите внимание, что ваша проблема не имеет ничего общего с использованием хранимой процедуры и всего, что связано с выбором и обработкой данных.

0 голосов
/ 12 мая 2011

Я действительно понял, что моя проблема не может быть решена с помощью моей хранимой процедуры, как упомянуто некоторыми из участников.Поскольку я отображаю результаты в своем отчете, я реорганизовал информацию в своем отчете и наборе данных так, чтобы между родителями и дочерними объектами были данные, и из набора данных моя информация была организована правильно.Я использовал решения, предложенные в этом посте, чтобы помочь мне: пост использовался, чтобы помочь мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...