Индивидуальный заказ в SQL Server - PullRequest
0 голосов
/ 17 мая 2019

Ниже приведен оператор выбора

select * 
from #final
order by 
    case  
       when [Col1] in (select top 10 [Col1] from #take order by [Col2] desc) 
          then 0
          else 2
    end

Мой оператор выбора выше возвращает результат, как показано ниже

            Col1                              Col2
            --------------------------------------
            App                              86748
            AppService                         832
            BK                               21227
            Cap                             160272
            Fukusima                          1634
            McBaa                             1727
            Others                            6718

Однако я бы хотел получить этот результат:

            Col1                              Col2
            --------------------------------------
            Cap                             160272
            App                              86748
            BK                               21227
            McBaa                             1727
            Fukusima                          1634
            AppService                         832
            Others                            6718

Как этого добиться? Благодаря.

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Вы только что провели различие между двумя типами, но внутри этого типа 0 нет метода второго порядка. Просто добавьте затем Col1 как второй порядок, по убыванию.

select * from #final
        order by 
        case when [Col1] in (select top 10 [Col1] from #take order by [Col2] desc) then 0
        else 2
        end, [Col2] desc
0 голосов
/ 17 мая 2019

С приведенной ниже структурой таблицы

CREATE TABLE final
    ([col1] varchar(10), [col2] int)
;

INSERT INTO final
    ([col1], [col2])
VALUES
    ('App', 86748),
    ('AppService', 832),
    ('BK', 21227),
    ('Cap', 160272),
    ('Fukusima', 1634),
    ('McBaa', 1727),
    ('Others', 6718)
;

Следующий запрос даст точные результаты

select * from final
        order by 
        case when [Col1] in (select top 6 [Col1] from final order by [Col1] asc) then Col2 
        end desc, 
        [Col1] asc


col1       |    col2
-----------------------
Cap        |    160272
App        |    86748
BK         |    21227
McBaa      |    1727
Fukusima   |    1634
AppService |    832
Others     |    6718
...