ORDER BY без Total в SQL - PullRequest
       32

ORDER BY без Total в SQL

0 голосов
/ 16 мая 2018

У меня есть этот 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
...

Ответы [ 4 ]

0 голосов
/ 16 мая 2018

Другие ответы неверно представляют то, что вы хотите.

  • Вы не хотите, чтобы строка была последней, потому что она NULL
  • Вы хотите, чтобы строка была последней, потому что она была сгруппирована

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, когда столбец является сгруппированным (так, чтобы строка стала последней) .Это особенно полезно при сворачивании нескольких столбцов.

0 голосов
/ 16 мая 2018

Попробуйте это

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
0 голосов
/ 16 мая 2018

Простое использование case выражение:

order by (case when SharepointId is null then 1 else 0 end), [Nombre de tickets] desc;
0 голосов
/ 16 мая 2018

Измените предложение Order By, как показано ниже:

CASE WHEN  ISNULL([SharepointId], 'Total') <>'Total' THEN  
Count([Id])END DESC, 1
...