No MS SQL Server 2005 estou escrevendo uma consulta com classificação condicional e meu problema é que não sei como posso classificar condicional usando duas colunas?
Se eu escrevi código assim, está funcionando normalmente
select
*
from
table
order by
case @pkr
when 'kol' then kol
when 'nci' then nci
end
Não sei como fazer ordenação condicional para duas ou mais colunas
select
*
from
table
order by
case @pkr
when 'KOL-NCI' then kol,nci
when 'kol-MPCI' then kol,mpci
end
Existe uma ideia de fazer TSQL dinâmico e usar sp_executesql
mas ainda estou procurando uma ideia melhor?
Admito que nunca tive que fazer isso antes, então houve um pouco de coçar a cabeça envolvido. Tabela de exemplo simples para demonstrar:
Usando um parâmetro @SortStyle para diferenciar as ordens de classificação, @SortStyle =1 classificará por
col1 ASC, col2 DESC
e @SortStyle=2 classificará porcol2 DESC, col1 ASC
.Como você ORDER BY um parâmetro abrange o caso mais simples de classificação por apenas 1 coluna.
Supondo que você tenha mais casos (adicionei um) e todos os tipos sejam compatíveis,
Não é uma classificação de várias colunas: você tem uma classificação primária, seguida por uma classificação secundária. Basta olhar para a caixa de diálogo de classificação no Excel para ver o que quero dizer.
Com o exemplo que você dá é simples:
É sempre bom evitar SQL dinâmico sempre que possível
Existe uma maneira mais simples, e que não precisa de um procedimento, ou vários "casos" Basta usar array
Ex:
testado no postgresql