2013-12-01 7 views
1

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

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

Может кто-то здесь помочь мне с этим?

Моя хранимая процедура:

CREATE PROCEDURE [dbo].[FetchRequests] 

    AS 
    BEGIN 
    SET NOCOUNT ON; 
    SELECT    categoryX, itemID 
         COUNT(*) AS groupCount, 
         MAX(dateX) AS groupNewest 
    FROM    LogRequests 
    WHERE    logStatus = 'active' 
    GROUP BY   categoryX, itemID 
    ORDER BY   groupCount desc, categoryX 
    FOR XML PATH('categoryX'), ELEMENTS, TYPE, ROOT('ranks') 
    END 

Текущий результат:

<ranks> 
    <categoryX> 
    <categoryX>Category 1</categoryX> 
    <itemID>ID 1</itemID> 
    <groupCount>1</groupCount> 
    <groupNewest>2013-11-21</groupNewest> 
    </categoryX> 
    <categoryX> 
    <categoryX>Category 2</categoryX> 
    <itemID>ID 2</itemID> 
    <groupCount>1</groupCount> 
    <groupNewest>2013-10-30</groupNewest> 
    </categoryX> 
    // ... 
</ranks> 

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

<ranks> 
    <categoryX> 
    <categoryX>Category 1</categoryX> 
    <groupCount>3</groupCount> 
    <groupNewest>2013-11-21</groupNewest> 
     <itemID>ID 1</itemID> 
     <itemID>ID 2</itemID> 
     <itemID>ID 3</itemID> 
    <categoryX>Category 2</categoryX> 
    <groupCount>4</groupCount> 
    <groupNewest>2013-10-15</groupNewest> 
     <itemID>ID 1</itemID> 
     <itemID>ID 2</itemID> 
     <itemID>ID 3</itemID> 
     <itemID>ID 4</itemID> 
    // ... 
    </categoryX> 
</ranks> 

Человек спасибо за любую помощь, Тим.

+0

Каков фактический результат? –

+0

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

+0

вы можете отступать ' элементы с пробелами, но это не делает его детьми' 'element –

ответ

3
select 
    lr.categoryX, 
    count(*) as groupCount, 
    max(lr.dateX) as groupNewest, 
    (
     select t.ItemID 
     from LogRequests as t 
     where t.logStatus = 'active' and t.categoryX = lr.categoryX 
     for xml path(''), type 
    ) 
from LogRequests as lr 
where lr.logStatus = 'active' 
group by lr.categoryX 
for xml path('categoryX'), root('ranks') 
+0

Thats perfect - именно то, что я искал! Большое спасибо. – user2571510

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