У меня есть этот SQL-запрос, который использует ROLLUP для получения суммы, но также должен упорядочить каждую вторую строку по сумме:
SELECT
ISNULL([SharepointId], 'Total') as 'Sharepoint',
Count([Id]) as 'Nombre de tickets'
FROM [dbo].[Tickets]
GROUP BY ROLLUP([SharepointId])
ORDER BY 2 DESC, 1
Есть ли способ убедиться, что общая сумма остается в конце результатов, сохраняя при этом порядок убывания других строк?
На данный момент я получаю следующее:
Sharepoint Nombre de tickets
------------------ -----------------
Total 20326
INTERNE 9396
MAIN 1503
...
@PeterAbolins Если бы это было так просто, мне нужно сохранить порядок убывания.
ORDER BY GROUPING([SharepointId]), COUNT([id]) DESC: docs.microsoft.com/en-us/sql/t-sql/functions/…

Измените предложение Order By, как показано ниже:
CASE WHEN ISNULL([SharepointId], 'Total') <>'Total' THEN
Count([Id])END DESC, 1
Попробуй это
SELECT
ISNULL([SharepointId], 'Total') as [Sharepoint],
Count([Id]) as [Nombre de tickets]
FROM [dbo].[Tickets]
GROUP BY ROLLUP([SharepointId])
ORDER BY CASE WHEN [SharepointId] IS NULL THEN 'B' ELSE 'A' END, [Nombre de tickets] DESC
Я не могу просто добавить еще один бессмысленный столбец, поскольку результат должен быть удобочитаемым.
Это не сработает, я не думаю, что ISNULL можно использовать таким образом.
это была просто опечатка. Добавлен пробел, чтобы сделать его ПУСТО (NULL)
Спасибо! закончился слиянием обоих ответов с ORDER BY CASE WHEN [SharepointId] IS NOT NULL THEN Count([Id]) END DESC, 1
рад помочь ;)
Простое использование выражения case:
order by (case when SharepointId is null then 1 else 0 end), [Nombre de tickets] desc;
Другие ответы неверно представляют то, что вы хотите.
В SQL Server есть функция именно для этого, и на странице документации есть почти в точности ваш пример ...
SELECT
ISNULL([SharepointId], 'Total') as 'Sharepoint',
Count([Id]) as 'Nombre de tickets'
FROM [dbo].[Tickets]
GROUP BY ROLLUP([SharepointId])
ORDER BY GROUPING([SharepointId]), 2 DESC
GROUPING([SharepointId]) - это 0, когда столбец нет сгруппирован (так что эти строки сортируются первыми), а затем это 1, когда столбец является сгруппирован (так что эта строка идет последней). Это особенно полезно при сворачивании нескольких столбцов.
Спасибо! Я знал, что есть более чистый способ сделать это.
Если вы измените предложение order by на возрастание, то вы обязательно убедитесь, что сумма всегда будет последней, если только все счетчики билетов не равны нулю:
ORDER BY 2 ASC, 1