группировка sql по значениям из двух столбцов

#sql #sql-server #select #sql-order-by #case

#sql #sql-сервер #выберите #sql-order-by #случай

Вопрос:

 City | Person           City | Person
--------------          -------------
C    | Fanie            D    | Jan
C    | Johannes         D    | Maria
C    | Anna      to     J    | Frik
D    | Jan              C    | Anna    
D    | Maria            C    | Fanie  
J    | Frik             C    | Johannes 
  

Я хочу, чтобы ^ таблица была похожа на эту ^.

Я пытался сказать Select * FROM TableA GROUP BY City ='D', City = 'J' City = 'C' , но тогда имена не в том порядке, как показано выше? Как бы мне этого добиться? Или как вы группируете по значению столбца и сортируете имена. ?

Комментарии:

1. вы хотите, чтобы это выглядело как левая таблица или правая таблица?

2. Упорядочить по городу с помощью оператора case

3. Как D перед J и C или Мария после Han, но перед Frik? Пожалуйста, объясните порядок сортировки, который вы имеете в виду.

Ответ №1:

Для индивидуальной сортировки или сортировки на основе некоторого правила можно использовать оператор case в предложении order by следующим образом и выполнить его

 Select * FROM TableA order by case when city ='D' then 1
when city ='J' then 2 else 3 end, Person
  

Можете ли вы попробовать это?

Комментарии:

1. Не могли бы вы подробнее рассказать, почему это хорошее решение проблемы.

2. вы хотите настроить сортировку, которая не является естественной, поэтому сделайте ее естественным порядком, т.е. 1,2,3, и отсортируйте ее

3. Не могли бы вы отредактировать свой ответ и добавить эту дополнительную информацию.

Ответ №2:

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

 SELECT City, Person
FROM TableA
WHERE City IN ('C', 'D', 'J')
ORDER BY
    (CASE City
        WHEN 'D' THEN 1
        WHEN 'J' THEN 2
        WHEN 'C' THEN 3
        ELSE 4 END),
    Person;
  

Ответ №3:

 select * from TableA ORDER BY City,Person
  

Это должно сработать, если вы хотите отсортировать по городу, а затем по человеку, но из вашего вывода я не вижу никакой сортировки.

Ответ №4:

я не знаю, зачем вам это нужно, я надеюсь, что это поможет вам!, я использовал функцию CASE MySQL решение, которое я предоставляю, заключается в том, ЧТО КОГДА город равен ‘D’, он будет первым, кто сортирует, тогда, если City = ‘C’, тогда это будет второй ЕЩЕэто будет последним

 SELECT * FROM TableA GROUP BY City,Person ORDER BY CASE WHEN City = 'D' THEN 1 WHEN 'C' THEN 2 ELSE 3 END
  

Комментарии:

1. Возможно, вы можете объяснить, как решить проблему упорядочения, определив порядок сортировки.

2. @pushpraj я использовал функцию CASE в MySQL. решение, которое я предоставляю, заключается в том, ЧТО КОГДА город равен ‘D’, он будет первым, кто сортирует, тогда, если City = ‘C’, он будет вторым, ИНАЧЕ он будет последним

3. отлично, включите то же самое и в свой ответ, чтобы сделать его более понятным.