Pergunta

Digamos que a minha relação é assim

enter image description here

e eu queria ordenar por posição, mas A e B do primeiro.Então, a minha relação vai olhar como

enter image description here

No começo eu tentava apenas tem duas relações, em que eu, tanto de-los por classificação, em seguida, união de duas relações, mas eles acabam por ficar misturados.Eu também tentei usando casos, mas eu não consigo entender como ele funciona.Eu continuei recebendo erros sobre a mistura de caracteres com números inteiros.

Editar:Esqueci de mencionar que a primeira relação acima é o que eu acabar com o fim de um complexo número de pontos de vista.Por exemplo, eu criei dois pontos de vista, um que só tem A e B classes, então eu pedi que por categoria.Segundo visualizar apenas classes C, ordenou que pelo rank.Então eu unida-los, mas eles se misturam.

Foi útil?

Solução

Você só precisa de um CASE expressão ORDER BY, para dividir as linhas em dois grupos, de modo que aqueles com classe 'A' ou 'B' são colocados no primeiro grupo (1) e a todos os outros na segunda (2):

ORDER BY 
    CASE WHEN class IN ('A', 'B') THEN 1 ELSE 2 END,
    rank ;

Outras dicas

Eu vou dar a você um exemplo de uma forma de o fazer, onde eu uso CTEs, que estão disponíveis em muitas bases de dados, particularmente PostgreSQL que eu estou mais familiarizado com.

CTEs e o WITH cláusula

CTEs permitem forma temporária, consulta única tabela de estruturas semelhantes, mas já que você pode fazer CTEs dependem de um outro em uma única consulta, ele fornece um conveniente e fácil de entender para fazer a sua consulta semi-processual.

No seu caso, gostaria de tentar

WITH AB_results AS(
  SELECT class, rank, 1 AS hidden_rank
  FROM my_relation
  WHERE class IN ('A','B')
),
Non_AB_results AS(
  SELECT class, rank, 2 AS hidden_rank
  FROM my_relation
  WHERE class NOT IN ('A','B')
)
SELECT COALESCE(AB_results.class,Non_AB_results.class), rank
FROM AB_results
FULL OUTER JOIN Non_AB_results
USING(hidden_rank,rank)
ORDER BY hidden_rank, rank;

Vou tentar montar um SQLFiddle em alguns minutos aqui, apenas para se certificar de que eu não tive alguns dos meus consulta errado.:P

EDITAR:Eu fiz um pequeno erro.Tentando limpá-lo com um exemplo como nós falamos.

EDIT 2:O erro agora está corrigido!Infelizmente, SQLFiddle está tendo um pouco de dificuldade, mas AQUI o link para o SQLFiddle para alguns testes.

Por favor, note que eu não possa ter resolvido isso na mais elegante possível, mas deve resolver os seus problemas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a dba.stackexchange
scroll top