我使用以下存储过程按类别对表中的项目进行分组,并为每个组添加计数和最大值
到目前为止,此工作正常。 我怎样才能实现,对于每个组我也会获得列出的包含项目? 当我只在这里选择一个列(例如itemID)时,我收到一个错误。
到目前为止我的存储过程:
ALTER PROCEDURE [dbo].[FetchRequests]
AS
BEGIN
SET NOCOUNT ON;
SELECT categoryX,
COUNT(*) AS groupCount,
MAX(dateX) AS groupNewest
FROM LogRequests
WHERE logStatus = 'active'
GROUP BY categoryX
ORDER BY groupCount desc, categoryX
FOR XML PATH('categoryX'), ELEMENTS, TYPE, ROOT('ranks')
END
我刚刚在上面添加“itemID”时收到的错误选择: 消息8120,级别16,状态1,过程FetchRequests, 列'LogRequests.itemID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
预期输出:
感谢您对此提供任何帮助,Tim。
答案 0 :(得分:2)
select子句中的任何非聚合字段必须出现在group by
子句
答案 1 :(得分:1)
ALTER PROCEDURE [dbo].[FetchRequests]
AS
BEGIN
SET NOCOUNT ON;
SELECT itemid,categoryX,
COUNT(*) AS groupCount,
MAX(dateX) AS groupNewest
FROM LogRequests
WHERE logStatus = 'active'
GROUP BY itemid,categoryX
ORDER BY groupCount desc, categoryX
FOR XML PATH('categoryX'), ELEMENTS, TYPE, ROOT('ranks')
END
您需要将项目添加到group by子句。