Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Order By

Estas en el tema de Order By en el foro de Mysql en Foros del Web. Buenas tardes, como puedo ordenar esto? tut1-1 tut1-2 tut1-3 tut1-4 tut10-1 tut10-2 tut10-3 tut11-1 tut11-2 tut11-3 tut11-4 tut2-1 tut2-2 ------ Quiero que salga asi: tut1-1 ...
  #1 (permalink)  
Antiguo 16/08/2012, 16:32
 
Fecha de Ingreso: noviembre-2007
Mensajes: 37
Antigüedad: 16 años, 5 meses
Puntos: 0
Order By

Buenas tardes, como puedo ordenar esto?

tut1-1
tut1-2
tut1-3
tut1-4
tut10-1
tut10-2
tut10-3
tut11-1
tut11-2
tut11-3
tut11-4
tut2-1
tut2-2
------
Quiero que salga asi:
tut1-1
tut1-2
tut1-3
tut1-4
tut2-1
tut2-2
tut10-1
tut10-2
tut10-3
tut11-1
tut11-2
tut11-3
tut11-4

En mi codigo tengo esto pero me aparece como lo primero que escribi.
Código:
group by serie,no_factura order by  serie, no_factura;
  #2 (permalink)  
Antiguo 17/08/2012, 00:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Order By

Deberías darnos más información. Parece que son dos campos, pero no nos dices qué tiene cada uno. Parece como si serie fuera tut2, tut11, etc. y no_factura 1, 2, 3, 4, 5, etc. Pero vemos igualmente un guión. Tal vez se trata de un solo campo en el que está escrito tal cual tut11-4. Tampoco nos dices si tut es siempre fijo o es variable y también hay que ordenar por esa parte de cadena.
Si se trata de dos campos distintos y el guión no forma parte de los valores almacenados en tabla, si tut es siempre una parte fija del texto y no hay otro prefijo, y no_factura es un campo numérico en la base, prueba con algo así:

Código MySQL:
Ver original
  1. ORDER BY CAST(LEFT(serie,3) AS UNSIGNED, no_factura

Si no es eso acláranos más sobre los campos, sus tipos y sus valores y posibilidades
  #3 (permalink)  
Antiguo 17/08/2012, 08:23
 
Fecha de Ingreso: noviembre-2007
Mensajes: 37
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Order By

Tienes razon no di mas informacion, y estas en lo correcto serie es tut1, tut2, tut10 y tut11 y el no_factura es 1,2,3 etc etc.
  #4 (permalink)  
Antiguo 17/08/2012, 08:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Order By

Prueba el ORDER BY que te puse y nos dices si el resultado es el esperado
Código MySQL:
Ver original
  1. ORDER BY CAST(LEFT(serie,3) AS UNSIGNED, no_factura
  #5 (permalink)  
Antiguo 17/08/2012, 09:10
 
Fecha de Ingreso: noviembre-2007
Mensajes: 37
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Order By

Este es el codigo completo al poner ORDER BY CAST(LEFT(serie,3) AS UNSIGNED, no_factura me da error de sintaxis

Código:
DELIMITER $$

DROP PROCEDURE IF EXISTS `usp_correlativoPlanta` $$
CREATE DEFINER=`factura`@`%` PROCEDURE `usp_correlativoPlanta`(
         in pFechaInicial date,
         in pFechaFinal date,
         in pCodigoPlanta varchar(50)

)
BEGIN

DROP TABLE IF EXISTS Tmp;
CREATE TABLE Tmp
SELECT factura.fecha as fecha, factura.serie as serie, factura.no_factura as no_factura,
planta.codigo as codigo, planta.nombre as nombre_planta,factura.nombre_cliente as nombre_cliente,
if(articulo.codigo='2005', factura_detalle.cantidad,0) as CL05,
if(articulo.codigo='2010', factura_detalle.cantidad,0) as CL10,
if(articulo.codigo='2020', factura_detalle.cantidad,0) as CL20,
if(articulo.codigo='2025', factura_detalle.cantidad,0) as CL25,
if(articulo.codigo='2035', factura_detalle.cantidad,0) as CL35,
if(articulo.codigo='2040', factura_detalle.cantidad,0) as CL40,
if(articulo.codigo='2060', factura_detalle.cantidad,0) as CL60,
if(articulo.codigo='2100', factura_detalle.cantidad,0) as CL100,

if(articulo.codigo='2005' or articulo.codigo='2010' or articulo.codigo='2020' or articulo.codigo='2025'
or articulo.codigo='2035' or articulo.codigo='2040' or articulo.codigo='2060' or  articulo.codigo='2100',factura_detalle.galones,0) as equival_galones,

if(articulo.tipo="A",cantidad,0) as carburacion,
if(articulo.tipo="G",cantidad,0) as granel,

if(factura.tipo_pago="C",factura.total,0) as contado,
if(factura.tipo_pago="R",factura.total,0) as credito



from factura
left join factura_detalle on factura.facturaid=factura_detalle.facturaid
inner join planta on factura.plantaid=planta.plantaid
left join articulo on factura_detalle.articuloid=articulo.articuloid;

select date_format(fecha,'%Y/%m/%d'), serie, no_factura, nombre_cliente, nombre_planta,
(sum(CL05)*5 + sum(CL10)*10 + sum(CL20)*20 + sum(CL25)*25 + sum(CL35)*35 + sum(CL40)*40 + sum(CL60)*60 + sum(CL100)*100) as libras,
sum(equival_galones) as cilindros,sum(carburacion) as carburacion, sum(granel) as granel,
(contado + credito) as total


from tmp c

where
date_format(fecha, '%Y/%m/%d') between pFechaInicial and pFechaFinal
and upper(codigo) = upper(pCodigoPlanta)
group by serie,no_factura,fecha     ORDER BY CAST(LEFT(serie,3) AS UNSIGNED, no_factura;



END $$

DELIMITER ;
  #6 (permalink)  
Antiguo 17/08/2012, 10:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Order By

perdona, había un error:
ORDER BY CAST( SUBSTRING( serie, 4 ) AS UNSIGNED ) , no_factura

pero si agrupas también por fecha, deberías ordenar igualmente por fecha... ¿no?


select date_format(fecha,'%Y/%m/%d'), serie, no_factura, nombre_cliente, nombre_planta,
(sum(CL05)*5 + sum(CL10)*10 + sum(CL20)*20 + sum(CL25)*25 + sum(CL35)*35 + sum(CL40)*40 + sum(CL60)*60 + sum(CL100)*100) as libras,
sum(equival_galones) as cilindros,sum(carburacion) as carburacion, sum(granel) as granel,
(contado + credito) as total


from tmp c

where
date_format(fecha, '%Y/%m/%d') between pFechaInicial and pFechaFinal
and upper(codigo) = upper(pCodigoPlanta)
group by serie,no_factura,fecha
ORDER BY CAST( SUBSTRING( serie, 4 ) AS UNSIGNED ) , no_factura, fecha
  #7 (permalink)  
Antiguo 17/08/2012, 12:49
 
Fecha de Ingreso: noviembre-2007
Mensajes: 37
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Order By

Gracias por tu ayuda juarena con eso si ya salio como yo queria.

Saludos,

Etiquetas: order
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:28.