ГРУППА запросов SQL Server с ROLLUP

Я пытаюсь выполнить запрос с помощью функции ROLLUP.

Предположим, что мой запрос:

SELECT  GEN.orgId,GEN.locId,GEN.rvcId
GEN.rvcName,GEN.menuItemID,GEN.menuItemName , SUM(salesTotal) as
salesTotal FROM GEN  GROUP BY  GEN.orgId,GEN.locId,
GEN.rvcName,GEN.menuItemID,GEN.menuItemName  ORDER BY GEN.menuItemName

Этот запрос выводит следующее:

orgId  locId  rvcName          menuItemID    menuItemName        salesTotal
10200  10002  Sydney Retail    10870         Cho Milk Shake        7.500000
10200  10002  Sydney Wholesale 10870         Cho Milk Shake        7.500000
10200  10002  Sydney Retail    10850         Berry Milk Shake     10.920000
10200  10002  Sydney Wholesale 10850         Berry Milk Shake     10.920000
10200  10002  Sydney Retail    10898         Apple Custard         5.460000
10200  10002  Sydney Wholesale 10898         Apple Custard         5.460000

Когда я применяю GROUPING и ROLLUP к моему запросу:

SELECT GEN.orgId,GEN.locId,  GEN.menuItemID, GEN.menuItemName,
CASE WHEN GROUPING( GEN.rvcName) = 1
    THEN 'Grand Total'
    ELSE GEN.rvcName END as rvcName
,SUM(salesTotal) as salesTotal
GROUP BY GEN.orgId,GEN.locId, GEN.rvcId, GEN.rvcName, GEN.menuItemID, GEN.menuItemName WITH ROLLUP  
ORDER BY   GEN.menuItemID asc   

Этот запрос выводит (только для Berry Milk Shake):

orgId   locId   menuItemID  menuItemName    rvcName           salesTotal
10200   10002   NULL            NULL             Sydney Retail     10.920000
10200   10002   NULL            NULL             Grand Total       10.920000
10200   10002   NULL            NULL             Sydney Wholesale  10.920000
10200   10002   NULL            NULL             Grand Total       10.920000
10200   10002   NULL            NULL             Grand Total       21.840000
10200   NULL    NULL            NULL             Grand Total       21.840000
NULL    NULL    NULL            NULL             Grand Total       21.840000
10200   10002   10850           Berry Milk Shake Sydney Wholesale  10.920000
10200   10002   10850           NULL             Sydney Wholesale  10.920000
10200   10002   10850           Berry Milk Shake Sydney Retail     10.920000
10200   10002   10850           NULL             Sydney Retail     10.920000

Мой вопрос: у меня так много ненужных данных, созданных с помощью этого запроса. Как я могу уточнить запрос и создать что-то вроде ниже. Заранее спасибо.

Я хочу добиться следующего:

orgId  locId  rvcName           menuItemID    menuItemName          salesTotal
10200  10002  Sydney Retail     10870         Cho Milk Shake        7.500000
10200  10002  Sydney Wholesale  10870         Cho Milk Shake        7.500000
10200  10002  ALL               10870         Cho Milk Shake       15.000000
10200  10002  Sydney Retail     10850         Berry Milk Shake     10.920000
10200  10002  Sydney Wholesale  10850         Berry Milk Shake     10.920000
10200  10002  ALL               10850         Berry Milk Shake     21.840000
10200  10002  Sydney Retail     10898         Apple Custard         5.460000
10200  10002  Sydney Wholesale  10898         Apple Custard         5.460000
10200  10002  ALL               10898         Apple Custard        10.920000

person Ozland    schedule 12.12.2013    source источник


Ответы (1)


Еще раз спасибо за этот вопрос.. Одна вещь, которую я хотел бы добавить здесь, это то, что мы не можем получить тот же результат, который вы ожидаете здесь. Причина этого в том, что данные столбца rvcName не будут поступать так, как вы хотите. Когда мы используем функцию группировки, все данные столбца, которые мы включили в наш запрос, группируются вместе.

Итак, все Sydney Retail, Sydney Wholesale будут сгруппированы вместе. Это обязательно позволит получить результат рядом, как вы хотите. Если вы видите в своем ожидаемом ответе, вы сгруппировали данные всех столбцов, кроме rvcName.

Итак, вот ваш запрос, я надеюсь, что это поможет вам...

выберите orgid,locid,rvcname, menuitemname,menuitemid, sum(salesTotal) как «общий объем продаж» из группы gen по orgid,locid, rvcName,menuItemName, menuitemid со сведением

и это даст вам такой результат

orgid locid rvcname menuitemname menuitemid общая продажа
1 2 Сиднейская розничная торговля яблочным кремом 30 5.46
1 2 Сиднейская розничная торговля яблочным кремом NULL 5.46
1 2 Сиднейская розничная торговля ягодным коктейлем 20 10.92
1 2 Сиднейская розничная торговля ягодным коктейлем NULL 10.92
1 2 Молочный коктейль в Сиднее 10 7.5
1 2 Молочный коктейль в Сиднее в розницу NULL 7.5
1 2 Розничный Сидней NULL NULL 23.88
1 2 Syndney Оптовая продажа яблочного крема 30 5.46
1 2 Syndney оптовый яблочный заварной крем NULL 5.46
1 2 Syndney оптовый ягодный коктейль 20 10.92
1 2 Syndney оптовый ягодный коктейль NULL 10.92
1 2 Syndney оптовый молочный коктейль 10 7.5
1 2 Syndney оптовый молочный коктейль NULL 7.5< br> 1 2 синдней оптом NULL NULL 23.88
1 2 NULL NULL NULL 47.76
1 NULL NULL NULL NULL 47.76
NULL NULL L NULL NULL NULL 47,76

Надеюсь, у вас есть проблемная область... единственное, что когда мы используем любую групповую функцию/функцию агрегирования, все похожие данные группируются вместе.

Если текст результата выглядит беспорядочно, попробуйте вставить в Excel. Я не знаю, почему, хотя я скопировал результат с сервера SQL в Excel, он выглядит беспорядочным. Приносим извинения за неудобства.

Если у вас все еще есть сомнения, не стесняйтесь, дайте мне знать.

С уважением, Ашай (Мумбаи/Индия)

person Ashay    schedule 13.12.2013