Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

andreyixo

order by não funciona para o Grid!

Recommended Posts

Boa tarde, estou com o seguinte problema...

 

Tenho o seguinte SELECT..

 

SELECT
    CONTRATO.IDCONTRATO,
    CONTRATO.DESCCONTRATO, 
    CONTRATO.DATACONTRATO,
    CONTRATO.VALICONTRATO,
    CONTRATO.SITUCONTRATO,
FROM CONTRATO
WHERE 
   (
      (CONTRATO.CODIEMPRESA = :CEMPRESA)
   AND
      (CONTRATO.TIPOCONTRATO = 0)
   )

UNION

SELECT 
    CONTRATO.IDCONTRATO,
    CAST('Plano Avulso, cobrança à vista' AS VARCHAR(70)) AS DESCCONTRATO,
    CONTRATO.DATACONTRATO,
    CONTRATO.VALICONTRATO,
    CONTRATO.SITUCONTRATO,
FROM CONTRATO
WHERE 
   (
      (CONTRATO.CODIEMPRESA = :CEMPRESA)
   AND
      (CONTRATO.TIPOCONTRATO = 1)
   )

ORDER BY 5 DESC

onde CONTRATO.SITUCONTRATO refere-se a situação...

-1 Vencido

0 Finalizado

1 Orçamento

2 Ativo

 

Gostaria que ficasse na ordem decrescente, mas pesar do DESC no ORDER BY, ele não fica como DESC

Uso dxDBGrid e nunca tive esse problema antes, é a primeira vez, e ele teima em não ordenar.

As propriedades do Grid estão conectadas corretamente com o DataSource os campos do Grid estão ok, todos com a propriedade Sorted setada como csNone

 

Me Ajudem!

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você já executou a query direto no seu BD para ver se o retorno está vindo ordenado como deseja? Que BD está usando? Se for o SQL Server, seria mais simples você usar um CASE dentro do seu select para montar sua consulta, algo tipo o código abaixo.

 

SELECT
    C.IDCONTRATO,
    CASE WHEN C.SITUCONTRATO = 0 THEN C.DESCCONTRATO
         WHEN C.SITUCONTRATO = 1 THEN 'Plano Avulso, cobrança à vista'    
    END AS DESCCONTRATO,
    C.DATACONTRATO,
    C.VALICONTRATO,
    C.SITUCONTRATO,
FROM CONTRATO C
WHERE 
   (
      (C.CODIEMPRESA = :CEMPRESA)
   AND
      (C.TIPOCONTRATO IN (0,1))
   )
ORDER BY C.SITUCONTRATO DESC

[]'S

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você já executou a query direto no seu BD para ver se o retorno está vindo ordenado como deseja? Que BD está usando? Se for o SQL Server, seria mais simples você usar um CASE dentro do seu select para montar sua consulta, algo tipo o código abaixo.

 

SELECT
    C.IDCONTRATO,
    CASE WHEN C.SITUCONTRATO = 0 THEN C.DESCCONTRATO
         WHEN C.SITUCONTRATO = 1 THEN 'Plano Avulso, cobrança à vista'    
    END AS DESCCONTRATO,
    C.DATACONTRATO,
    C.VALICONTRATO,
    C.SITUCONTRATO,
FROM CONTRATO C
WHERE 
   (
      (C.CODIEMPRESA = :CEMPRESA)
   AND
      (C.TIPOCONTRATO IN (0,1))
   )
ORDER BY C.SITUCONTRATO DESC

[]'S

 

Obrigado pela dica, realmente não tinha pensado no CASE WHEN, to usando Firebird, direto do banco de dados está retornando como eu desejo, somente no Delphi que não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, que versão do Firebird está usando? Pelo que estive lendo no SQL Magazine, o CASE foi habilitado a partir da versão 1.5 do Firebird, conforme demonstrado neste artigo. Pode mostrar como está sua query atual, o que está retornando e como deveria retornar a consulta (exemplos)?

 

[]'s

 

Ps.: estou arrumando o select inicial que lhe passei porque observei que eu cometi um erro nele... era pra por C.TIPOCONTRATO ao invés de C.SITUCONTRATO no Case que eu montei.

 

SELECT
    C.IDCONTRATO,
    CASE WHEN C.TIPOCONTRATO = 0 THEN C.DESCCONTRATO
         WHEN C.TIPOCONTRATO = 1 THEN 'Plano Avulso, cobrança à vista'    
    END AS DESCCONTRATO,
    C.DATACONTRATO,
    C.VALICONTRATO,
    C.SITUCONTRATO,
FROM CONTRATO C
WHERE 
   (
      (C.CODIEMPRESA = :CEMPRESA)
   AND
      (C.TIPOCONTRATO IN (0,1))
   )
ORDER BY C.SITUCONTRATO DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.