Рассмотрим весь результат по порядку - PullRequest
0 голосов
/ 23 июня 2019

В настоящее время у меня есть таблица с двумя столбцами OriginalName и SocialName. Я пытаюсь упорядочить по этим двум, используя order by, но проблема в том, что я хочу, чтобы два столбца учитывались в порядке, но мои результаты упорядочены по первому столбцу, а затем по другому.

У меня есть таблица с такими значениями

OriginalName                    SocialName

Beatriz N G LEMES               BEA LEMES
Carol Susan Jane Danvers        Carol Danvers
Cris colaboradora               Nome Social Cris 
Lucas André Márcio Rodrigues    NULL
Vinicius Cláudio Miguel Aragão  Alice Castro
Miguel Carlos Eduardo Farias    Alessandra Farias
Isis Aparecida Cristiane Assis  Isis  Assis
Danéria Targarião               Danny Targarião


select OriginalName,SocialName
order by case when Coalesce(SocialName,'') = ''  then   1 else  0 end , pfi.NomeSocial, pfi.Nome desc

После заказа результат получается вот так

OriginalName                    SocialName

Miguel Carlos Eduardo Farias    Alessandra Farias
Vinicius Cláudio Miguel Aragão  Alice Castro
Beatriz N G LEMES               BEA LEMES
Carol Susan Jane Danvers        Carol Danvers
Danéria Targarião               Danny Targarião
Isis Aparecida Cristiane Assis  Isis  Assis
Cris colaboradora               Nome Social Cris 
Lucas André Márcio Rodrigues    NULL

как вы можете видеть, это действительно упорядочивает таблицу, но она упорядочивает socialName, а затем упорядочивает оригинальное имя, например, OriginalName Cris colaboradora не должно следовать за SocialName Дэнни Таргарио, что я действительно хотел, чтобы рассмотреть оба столбца как то так:

OriginalName                    SocialName

Miguel Carlos Eduardo Farias    Alessandra Farias
Vinicius Cláudio Miguel Aragão  Alice Castro
Beatriz N G LEMES               BEA LEMES
Carol Susan Jane Danvers        Carol Danvers
Cris colaboradora               Nome Social Cris 
Danéria Targarião               Danny Targarião
Isis Aparecida Cristiane Assis  Isis  Assis
Lucas André Márcio Rodrigues    NULL

Ответы [ 2 ]

1 голос
/ 23 июня 2019

Используйте 2 оператора case в предложении ORDER BY:

select * from tablename
order by 
  case when Coalesce(SocialName,'') = '' then 1 else  0 end,
  case
    when OriginalName < SocialName then OriginalName
    else SocialName
  end

См. Демоверсию .
Результаты:

> OriginalName                     | SocialName       
> :------------------------------- | :----------------
> Miguel Carlos Eduardo Farias     | Alessandra Farias
> Vinicius Cláudio Miguel Aragão   | Alice Castro     
> Beatriz N G LEMES                | BEA LEMES        
> Carol Susan Jane Danvers         | Carol Danvers    
> Cris colaboradora                | Nome Social Cris 
> Danéria Targarião                | Danny Targarião 
> Isis Aparecida Cristiane Assis   | Isis  Assis      
> Lucas André Márcio Rodrigues     | null
0 голосов
/ 23 июня 2019

Можете ли вы проверить этот следующий скрипт?этот скрипт дает ожидаемый результат.

Проверка Демо Здесь.

SELECT
SUBSTRING(Combined,1,CHARINDEX('###',Combined,1)-1) OriginalName,
SUBSTRING(Combined,CHARINDEX('###',Combined,1)+3,LEN(Combined)) SocialName,
MIN(RN)
FROM 
(
    SELECT Combined,ROW_NUMBER() OVER(ORDER BY OriginalName) RN
    FROM
    (
        SELECT OriginalName,OriginalName+'###'+SocialName Combined FROM your_table
        UNION ALL
        SELECT SocialName,OriginalName+'###'+SocialName FROM your_table 
    )A
)B
GROUP BY SUBSTRING(Combined,1,CHARINDEX('###',Combined,1)-1),
SUBSTRING(Combined,CHARINDEX('###',Combined,1)+3,LEN(Combined))
ORDER BY 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...