Объедините результаты из нескольких наборов результатов оператора select в одну запись в таблице
У меня очень специфическая проблема.
Мне нужно получить EmployeeID, UserID, сумму TotalValue и сумму COUNT столбцов StartDate в виде одной записи из моей хранимой процедуры.
Сценарий :
Что я уже пробовал:
Если я попробую это сделать :
Select EmployeeID, UserID, Sum(TotalValue), Sum(Count(StartDate)) From Employees Group By EmployeeID, UserID
Проблема в том, что я не могу суммировать и считать одновременно, так как это дает мне следующую ошибку :
Невозможно выполнить агрегатную функцию для выражения, содержащего агрегат или подзапрос
И вот что я сделал :
Select EmployeeID, UserID, TotalSummedValue, SUM(NoOfDates) FROM ( Select EmployeeID, UserID, SUM(TotalValue) AS TotalSummedValue, COUNT(StartDate) FROM Employees GROUP BY EmployeeID, UserID ) AS inner GROUP BY EmployeeID, UserID
Но теперь проблема заключается в том, что значение, возвращаемое COUNT(StartDate), зависит от группировки во внутреннем запросе. Поэтому мне, по сути, приходится извлекать счетчик и остальные данные отдельно.
Поэтому я сделал базовый запрос (это упрощенная версия фактического запроса), результаты которого я вставляю во временную таблицу и повторно использую ->
Insert Into #TempBase SELECT EmployeeID, UserID, TotalValue, StartDate FROM Employees
И используйте его вот так :
Insert INTO #Temp2 Select EmployeeID, UserID, SUM(TotalValue) AS TotalSummedValue FROM #TempBase Insert INTO #Temp3 Select SUM(NoOfDates) FROM ( Select COUNT(StartDate) AS NoOfDates FROM #TempBase )
И затем, чтобы все это было записано в одной записи, я сейчас делаю эту уродливую вещь :
Insert INTO #Temp4 (EmployeeID, UserID, TotalSummedValue, TotalDays) Values((Select EmployeeID FROM #Temp2), (Select UserID FROM #Temp2), (Select TotalSummedValue FROM #Temp2),(Select NoOfDates FROM #Temp3)) Select * from #Temp4
Я хотел бы знать, есть ли лучший способ сделать это.
Peter Leow
Счетчик (StartDate) даст вам общее количество доступных StartDate, зачем снова суммировать? Можете ли вы показать какой-нибудь пример вывода?
jamuro77
Вы не можете группировать два раза по одним и тем же полям. В этом нет никакого смысла. Вы можете получить "счет " или" сумму " отдельно, но не вместе. Я думаю, что вам нужно поле, не группирующееся по EmployeeID и UserID. Для выработки решения потребуются ожидаемые результаты...