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 um código como este, está funcionando normalmente
select
*
from
table
order by
case @pkr
when 'kol' then kol
when 'nci' then nci
end
Não sei como fazer pedidos condicionais 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 idéia para tornar o TSQL dinâmico e usar, sp_executesql
mas ainda estou procurando uma idéia melhor?
sql-server
order-by
adoptilot
fonte
fonte
CASE
pode ser aplicável a este caso.Respostas:
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 entre ordens de classificação, @SortStyle = 1 será classificado por
col1 ASC, col2 DESC
e @ SortStyle = 2 porcol2 DESC, col1 ASC
.Como você ORDER BY um parâmetro abrange o caso mais simples de classificação por apenas 1 coluna.
fonte
Supondo que você tenha mais casos (adicionei um) e todos os tipos sejam compatíveis,
Não é uma classificação com 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 entender o que quero dizer.
fonte
Com o exemplo que você dá, é simples:
É sempre bom evitar SQL dinâmico sempre que possível
fonte