Я не использовал Group By
, что намного раньше, и всегда получаю сообщение об ошибке при попытке группы следующих по ошибке UserID
SQL Server: Как использовать групповую By в некоторых Выберите
:
Column 'Log.Version' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Может ли кто-нибудь сказать мне, как я могу избежать этого? То, что я пытаюсь получить, - это подсчет для каждого пользователя, каждый пользователь которого появляется только один раз для каждого инструмента, а не для каждого использования отдельно.
Мой запрос (работает на выше + упрощенным для демонстрации за исключением):
ALTER PROCEDURE [dbo].Reporting_FetchUsage
AS
BEGIN
SET NOCOUNT ON;
SELECT
A.UserID, A.Tool, A.[Version], A.Note, A.[TimeStamp],
B.ADesc, B.SDesc, B.DDesc, B.ALN
FROM
Log A
LEFT JOIN
EmployeeTable B ON B.NTID = A.UserID
WHERE
A.[TimeStamp] > DATEADD(YEAR, -1, GETDATE())
AND (A.Tool LIKE 'abc%'
OR
A.Tool LIKE 'def%'
OR
A.Tool LIKE 'ghi%')
AND (B.DDesc = 'CB'
OR
B.DDesc = 'PS')
GROUP BY
A.Tool, A.UserID
ORDER BY
A.Tool, A.UserID
FOR XML PATH('reporting'), ELEMENTS, TYPE, ROOT('ranks')
END
Большое спасибо заранее, Тим.
Включите все поля в предложение 'GROUP BY', которое находится в вашем операторе' SELECT', который не используется в агрегате. – sgeddes
Сообщение об ошибке довольно ясно. Если вы хотите, чтобы агрегированные данные вам нужно группировать по неагрегированным столбцам. Я думаю, вы не хотите, чтобы большая часть столбцов выводилась. Какую заметку, timeStamp и т. Д. Вы хотите получить, если хотите эти столбцы? –