Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Ordenar Consulta sin Referencia de Columna (https://www.clubdelphi.com/foros/showthread.php?t=49441)

trulli 22-10-2007 03:22:00

Ordenar Consulta sin Referencia de Columna
 
Que Tal.
Tengo una Duda como puedo Ordenar una Consulta sin tener ningun campo de referencia en ella? ejemplo:

Select condicion,count(condicion) from articulos group by condicion

Condicion puede ser (Malo,Regular,Bueno,MuyBueno,Excelente) es un string

cuando agrego al final order by condicion me devuelve los campos en orden alfabetico y quiero que me los regrese en el orden
malo
regular
bueno
...
como puedo hacer esto he agregado una tabla llamada detalle
que contiene los campos condicion e indice ejemplo
malo 1
regular 2
no se si uniendolas para poder ordenarlas por el campo indice puedo obtener lo que quiero o existe algun parametro en el order by y decirle como quiero el orden.

espero me di a entender gracias.

Lepe 22-10-2007 10:43:49

La tabla detalle la llamaría condicion con dos campos (condicion de tipo string, e IdCondicion de tipo integer o autoincrement).

En la tabla productos añades una clave ajena (foránea) llamada idCondicion que será de tipo integer.

Ahora no tienes la condicion en un string (en la tabla artículos), pero puedes crear una vista, o un sql que una ambas tablas:

Código SQL [-]
select a.Nombre, c.condicion
from articulos a inner join condicion c on a.idcondicion = c.idcondicion
order by c.idcondicion  ****
los asteriscos puedes sustituirlos por el tipo de ordenamiento Ascendente "Asc" o descendente "Desc"

Para que el usuario pueda asignar a un artículo su condición, usa un DBLookUpCombo.

Saludos

trulli 23-10-2007 00:50:46

Gracias amigo Lepe

Intentare hacer de ese modo, mas o menos lo que ocupo se veria asi:

select a.Nombre, c.condicion,count(a.Nombre)
from articulos a inner join condicion c on a.idcondicion = c.idcondicion group by a.Nombre order by c.idcondicion desc

afxe 23-10-2007 10:54:13

Otro modo... pero no lo he probado
 
Una vez hice algo parecido, no lo recuerdo bien, pero era algo así (firebird 2.0):
Código SQL [-]
SELECT Condicion, iif(Condicion= 'Malo', 1, 
                         iif(Condicion='Regular', 2, 
                         iif(condicion='Bueno', 3 ) ) ),
           COUNT(Condicion)
FROM articulos
GROUP BY 1, 2
ORDER BY 2;

Ya me contarás....

trulli 25-10-2007 02:10:26

Que Tal afxe

he copiado y pegado lo que me comentas, pero no a funcionado, parece logica esa solucion, pero no funciona posiblemente por error de sintaxis :(

Gracias :o

RONPABLO 25-10-2007 02:22:27

que tal de esta forma

Código SQL [-]
SELECT Condicion, 
case Condicion 
   when 'Malo' then 1 
   when 'Regular' then 2
   when 'Bueno' then 3
end Ordenador, 
COUNT(Condicion) Total
FROM articulos
GROUP BY 1, 2
ORDER BY 2;

trulli 25-10-2007 02:38:22

RONPABLO

:) Barbaro, Genial amigo esa es una Muy buena solucion simple y sin complicaciones, Mil Gracias :D

RONPABLO 25-10-2007 17:49:38

jeje gracias, pero creo que el de la idea fue afxe, yo solo la adapte a firebird


La franja horaria es GMT +2. Ahora son las 05:07:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi