SQL - order by

 
Vista:

order by

Publicado por Damian (26 intervenciones) el 30/10/2008 18:25:49
Tengo una consulta donde me trae los totales de ventas por clientes y estos mismos pueden estar en facturacion o en pedidos, por eso el uso de union la consulta me devuelve bien los registros, mas alla que no me suma ambos select(yo lo manipulo desde visual basic), el problema que tengo es que el order by solo me trae por partes o sea en este caso yo quiero que me traiga primero Jimenez Maria que sumando ambas tablas es al que mas se le vendio pero me trae primero GONZALEZ SA, que solo esta en facturacion. Mi consulta es:

select Case when(C.Apellido) is null then C.NombreContacto else C.Apellido+','+C.Nombre end
Cliente,sum(F.TotalFact) from Facturacion F,Clientes C where C.CodCli=F.CodCli and
(F.Comprobante='FA' or F.Comprobante='ND') group by C.Apellido,C.NombreContacto,C.Nombre
union
select Case when(C.Apellido) is null then C.NombreContacto else C.Apellido+','+C.Nombre end Cliente,
sum(P.TotalPed) from Pedidos P,Clientes C where C.CodCli=P.CodCli and (P.Facturado='NO') group by
C.Apellido,C.NombreContacto,C.Nombre order by 2 desc,1

Y el resultado segun lo que tengo cargado es:
Clientes Totales

GONZALES SA 537.6
Jimenez,Maria 452.9
Massa,Julio 327
Jimenez,Maria 227.6
Massa,Julio 196.5
SUAREZ S.A 107.7
Ferreyra,Natalia 39.5

O sea en realidad esta bien, pero yo quisiera juntar los clientes repetidos y sumarlos, y asi el order by me lo trae como quiero. Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:order by

Publicado por pacopaz (143 intervenciones) el 30/10/2008 19:40:16
No tienes por que hacer la suma en vb, ya que la puedes hacer desde sql, sabiendo usar selects anidados.
Tu solución puede parecerse a esto:

select
t.Nombre
sum(t.Cantidad)
from
(select Case when(C.Apellido) is null then C.NombreContacto else C.Apellido+','+C.Nombre end
Cliente,sum(F.TotalFact) Cantidad from Facturacion F,Clientes C where C.CodCli=F.CodCli and
(F.Comprobante='FA' or F.Comprobante='ND') group by C.Apellido,C.NombreContacto,C.Nombre
union
select Case when(C.Apellido) is null then C.NombreContacto else C.Apellido+','+C.Nombre end Cliente,
sum(P.TotalPed) Cantidad from Pedidos P,Clientes C where C.CodCli=P.CodCli and (P.Facturado='NO') group by
C.Apellido,C.NombreContacto,C.Nombre) as t
order by Nombre, sum(t.Cantidad) DESC

Espero que te sirva.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:order by

Publicado por Damian (26 intervenciones) el 30/10/2008 20:20:27
Gracias pacopaz, pero probe tu consulta y me tira varios errores como que t es invalido y tambien me dice columna invalida tanto Nombre como Cantidad. En el select que agregastes "select t.Nombre sum(t.Cantidad) from" no falta la coma despues de t.Nombre, yo la e agregado pero igual sigue tirando errores en t......
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:order by

Publicado por pacopaz (143 intervenciones) el 30/10/2008 21:24:40
Perdón, me faltó (además) el group by:

select
t.Nombre,
sum(t.Cantidad)
from
(select Case when(C.Apellido) is null then C.NombreContacto else C.Apellido+','+C.Nombre end
Cliente,sum(F.TotalFact) Cantidad from Facturacion F,Clientes C where C.CodCli=F.CodCli and
(F.Comprobante='FA' or F.Comprobante='ND') group by C.Apellido,C.NombreContacto,C.Nombre
union
select Case when(C.Apellido) is null then C.NombreContacto else C.Apellido+','+C.Nombre end Cliente,
sum(P.TotalPed) Cantidad from Pedidos P,Clientes C where C.CodCli=P.CodCli and (P.Facturado='NO') group by
C.Apellido,C.NombreContacto,C.Nombre) as t
group by t.Nombre
order by sum(t.Cantidad) DESC, t.Nombre
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:order by

Publicado por Damian (26 intervenciones) el 30/10/2008 22:44:03
Sigue tirandome un error que dice "Invalid column name 'Nombre'."
Y me lo marca en la linea que tiene:
group by t.Nombre order by sum(t.Cantidad) DESC, t.Nombre

como que la columna t.Nombre no existe
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:order by

Publicado por pacopaz (143 intervenciones) el 30/10/2008 22:58:01
Esto pasa por no fijarme en los nombres de los alias.
El problema es que pensé que el alias era Nombre, cuando en realidad es Cliente.

Esto si debería funcionar:

select
t.Cliente,
sum(t.Cantidad)
from
(select Case when(C.Apellido) is null then C.NombreContacto else C.Apellido+','+C.Nombre end
Cliente,sum(F.TotalFact) Cantidad from Facturacion F,Clientes C where C.CodCli=F.CodCli and
(F.Comprobante='FA' or F.Comprobante='ND') group by C.Apellido,C.NombreContacto,C.Nombre
union
select Case when(C.Apellido) is null then C.NombreContacto else C.Apellido+','+C.Nombre end Cliente,
sum(P.TotalPed) Cantidad from Pedidos P,Clientes C where C.CodCli=P.CodCli and (P.Facturado='NO') group by
C.Apellido,C.NombreContacto,C.Nombre) as t
group by t.Nombre
order by sum(t.Cantidad) DESC, t.Cliente

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:order by

Publicado por pacopaz (143 intervenciones) el 30/10/2008 22:58:52
Oops, me faltó cambiar uno:

select
t.Cliente,
sum(t.Cantidad)
from
(select Case when(C.Apellido) is null then C.NombreContacto else C.Apellido+','+C.Nombre end
Cliente,sum(F.TotalFact) Cantidad from Facturacion F,Clientes C where C.CodCli=F.CodCli and
(F.Comprobante='FA' or F.Comprobante='ND') group by C.Apellido,C.NombreContacto,C.Nombre
union
select Case when(C.Apellido) is null then C.NombreContacto else C.Apellido+','+C.Nombre end Cliente,
sum(P.TotalPed) Cantidad from Pedidos P,Clientes C where C.CodCli=P.CodCli and (P.Facturado='NO') group by
C.Apellido,C.NombreContacto,C.Nombre) as t
group by t.Cliente
order by sum(t.Cantidad) DESC, t.Cliente

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:order by

Publicado por Damian (26 intervenciones) el 31/10/2008 17:05:21
Buenisimo, ahora si anda de maravillas es increible lo que puedes hacer en una consulta y yo que algunas las tengo que manipular desde Visual, gracias siempre se aprende algo mas...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar