[RESOLVIDO] Quebra estática com campo CASE do Select.

Bom dia pessoal,

Estou precisando categorizar dados de um select através do CASE conforme código abaixo. No SQL Builder o Select funciona normalmente porém ao utilizar este comando em uma aplicação de Consulta dá erro.
O que aconteceu:
No menu “Consulta–> Editar Campos”, não aparecem os campos. Então removi os 7 primeiros campos do select e executei, e então mostrou os campos “OrdemAno” e “TipoAno”. Então recoloquei no select os campos retirados anteriormente e consegui pelo menos executar a consulta corretamnete (Vai entender).

Porém o que eu preciso é fazer a Quebra do campo “TipoAno” e acontece o erro abaixo. Alguma sugestão?

SELECT CRM_TIPOATENDIMENTO, CRM_SITUACAO, CRM_CLIENTE, CRM_CONTATO, CRM_USUARIO, CRM_DATA_ATENDIMENTO, CRM_PROXIMA_DATA_ATEN, YEAR(CRM_DATA_ATENDIMENTO) AS OrdemAno, CASE YEAR(CRM_DATA_ATENDIMENTO) WHEN 2014 THEN 'Ano 1' WHEN 2013 THEN 'Ano 2' WHEN 2012 THEN 'Ano 3' ELSE 'Ano 4 e posteriores' END AS TipoAno FROM dbo.CRM2;

Erro ao executar aplicação com quebra estática no campo “TipoAno”:

Erro ao acessar o banco de dados
SQLState: 42000 Error Code: 156 Message: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Incorrect syntax near the keyword ‘order’. SQLState: 42000 Error Code: 156 Message: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Incorrect syntax near the keyword ‘order’.
SELECT CRM_TIPOATENDIMENTO, CRM_SITUACAO, CRM_CLIENTE, CRM_CONTATO, CRM_USUARIO, YEAR(CRM_DATA_ATENDIMENTO) as ordemano, CASE YEAR(CRM_DATA_ATENDIMENTO) WHEN 2014 THEN ‘Ano 1’ WHEN 2013 THEN ‘Ano 2’ WHEN 2012 THEN ‘Ano 3’ ELSE ‘Ano 4 e posteriores’ END as tipoano from dbo.CRM2; order by CASE YEAR(CRM_DATA_ATENDIMENTO) WHEN 2014 THEN ‘Ano 1’ WHEN 2013 THEN ‘Ano 2’ WHEN 2012 THEN ‘Ano 3’ ELSE ‘Ano 4 e posteriores’ END asc

Crie uma view e use a view na Consulta.

Pois é acho que é a unica alternativa. Vou fazer por ai mesmo
Obrigado

Outra alternativa é não usar o case para traduzir o valor de um campo. Talvez seja mais fácil e integrado manter o SQL simples e fazer essas substituições dentro da aplicação, por meio de lookup manual, evento onRecord ou campo virtual.

Para a pesquisa, você pode criar um campo personalizado no search e aplicar sua própria regra.

Henrique!

O código que postei foi só um exemplo mesmo. Nao posso usar no campo virtual ou onRecord porque eu preciso fazer quebra com os valores. Também não posso usar o Lookup porque vou usar um subselect dentro do CASE para categorizar resultados baseado em outros campos e com diferentes condições. O mais fácil mesmo é usar uma VIEW. De qualquer forma obrigado pela sugestão.

Ssusin, o DECODE (oracle) funciona… mas acho que não tem decode no MS-SQL Server né? Poderia usar Dense_rank também, fazendo com que o ano 1, 2, 3, 4 fosse até dinâmico, vai fazendo testes com Dense_Rank que conseguirá isso… fica bem bacana… só achar um jeito de ordenar por ano e criar o ranqueamento… fica top!