2013-11-30 2 views
1

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

Это прекрасно работает до сих пор. Как я могу достичь, что для каждой группы я также получаю содержащиеся элементы? Когда я просто добавляю столбец (например, 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" в приведенном выше Select: Msg 8120, уровень 16, состояние 1, процедура FetchRequests, Столбец «LogRequests.itemID» недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

Ожидаемый результат:

  • Категория 1
    • groupCount
    • groupNewest
    • список всех itemIDs с категории = 1
  • Категория 2
    • groupCount
    • groupNewest
    • список всех itemIDs с категорией = 2
  • Категории 3
    • groupCount
    • groupNewest
    • список всех itemIDs с категорией = 3

Спасибо за любую помощь в этом, Тим.

+0

Можете ли вы предоставить образцы данных и ожидаемый результат? Я не понимаю, что вы подразумеваете под «Я также получаю содержащиеся в нем элементы». –

+0

Спасибо. Я добавлю это на свой пост. – user2571510

ответ

2

любое необобщенное поле в выбранном пункте должно появиться в group by пункте

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 

Вам нужно добавить ItemID в GroupBy положения.

+0

Спасибо! Раньше я это пробовал. Проблема здесь в том, что она не группирует идентификаторы item под категориями. Я ищу список, который сгруппирован по категориям, а затем под каждой категорией перечислены элементы с этой категорией. – user2571510

Смежные вопросы