andreyixo 0 Denunciar post Postado Julho 16, 2009 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
Chrnos 30 Denunciar post Postado Julho 17, 2009 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
andreyixo 0 Denunciar post Postado Julho 22, 2009 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
Chrnos 30 Denunciar post Postado Julho 22, 2009 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