Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta SQL (https://www.clubdelphi.com/foros/showthread.php?t=73081)

newtron 30-03-2011 19:03:58

Consulta SQL
 
Hola.

Tengo una tabla con estos registros:

Pedido Articulo Cantidad Servido
00000001 0001 1 0
00000001 0002 2 1

00000002 0001 1 0
00000002 0002 5 5
00000002 0003 2 0

00000003 0001 2 0
00000003 0002 5 0
00000003 0003 2 0

00000004 0001 5 0
00000004 0002 2 0
00000004 0003 3 0

Necesitaría que algún amable gurú del sql me dijera si es posible hacer una instrucción para que me de el valor de la suma de las cantidades pedidas de un artículo siempre que no hubiera ningún artículo servido dentro del pedido. O sea, para este ejemplo tendría que dar lo siguiente:

0001=7
0002=7
0003=5

porque ignoraría las cantidades correspondientes a los pedidos 00000001 y 00000002 que ya tienen parte de los artículos servidos independientemente del artículo que se haya servido dentro del mismo.

Gracias y un saludo

oscarac 30-03-2011 19:11:24

no entendi muy bien tu sumatoria

segun mi interpretacion sume
0001.....9
0002.....7
0003.....7


no he considerado los que servido <> 0

newtron 30-03-2011 19:19:39

Hola y gracias por responder.

El tema es que hay que ignorar los pedidos en los que cualquier línea estén entregados total o parcialmente independientemente de que sea ese artículo u otro, por eso los dos primeros pedidos los ignoro de la sumatoria.

Saludos

oscarac 30-03-2011 19:22:51

ah ok...
pero... que campo.. o como sé que el producto esta parcial o totalmente entregado?

newtron 30-03-2011 19:28:43

A ver si consigo explicarme:

Código:

Pedido      Articulo  Cantidad  Servido
00000001  0001          1            0
00000001  0002          2            1
                                            --- 
              TOTAL SERVIDO          1
00000002  0001          1            0
00000002  0002          5            5
00000002  0003          2            0
                                            --- 
              TOTAL SERVIDO          5
 
00000003  0001          2            0
00000003  0002          5            0
00000003  0003          2            0
                                          --- 
            TOTAL SERVIDO          0
 
00000004  0001          5            0
00000004  0002          2            0
00000004  0003          3            0 
                                          --- 
          TOTAL SERVIDO            0

Lo que necesito es la suma de las cantidades pedidas de los artículos en los que no haya nada recibido del pedido, o sea, que el TOTAL RECIBIDO=0. Si cualquier línea del pedido ha sido recibida total o parcialmente ya no debe de sumar la cantidad del artículo.

oscarac 30-03-2011 21:37:06

Que Base de Datos estas usando?

oscarac 30-03-2011 21:47:12

Newtron

podrias hacer esto...

Código SQL [-]
Select Articulo, Sum (Cantidad) As Cant
from tabla1
where Pedido not in (Select Pedido  from tabla1 where Servido <>0)
group by articulo

Sumas las cantidades de los articulos cuyo pedido no haya sido atendido (servido=0) :eek:

espero te sirva

saludos

Casimiro Notevi 30-03-2011 22:43:45

También creo que sirve algo así:

Código SQL [-]
select pedido, sum(cantidad), sum(servido)
from PRUEBA004
group by pedido
having sum(servido)>0

Chris 30-03-2011 22:59:24

Solo una observación. Casimiro, me parece que el HAVING no es necesario en este caso.

oscarac 30-03-2011 23:05:59

Consulta1ArticuloCant
0001
7
0002
7
0003
5

me he tomado el trabajito de crear la tabla y colocarle los datos que mencionas.... con el query que te puse mas arriba me da el resultado mostrado

Casimiro Notevi 31-03-2011 01:11:21

Cita:

Empezado por Chris (Mensaje 395153)
Solo una observación. Casimiro, me parece que el HAVING no es necesario en este caso.

Si quiere los que no se haya servido nada, entonces será servido=0
Código SQL [-]
select pedido, sum(cantidad), sum(servido)
from PRUEBA004
group by pedido
having sum(servido)=0

¿O no lo he entendido bien?:o

Chris 31-03-2011 01:16:04

Cita:

Empezado por Casimiro Notevi (Mensaje 395180)
Si quiere los que no se haya servido nada, entonces será servido=0
Código SQL [-]
select pedido, sum(cantidad), sum(servido)
from PRUEBA004
group by pedido
having sum(servido)=0

¿O no lo he entendido bien?:o

mmm, no sé exactamente la claúsula Having, pero creo que se comporta como un WHERE para el GROUP BY. Si es lo que creo, entonces el GROUP BY no haría el trabajo que se espera a menos que servido sea 0. Si te refieres a no devolver e los resultados los que tengan servidor=0, entonces, hasta dónde sé se debería utilizar WHERE

O eso es lo que creo ... :confused: :confused: :confused:

oscarac 31-03-2011 02:45:43

el tema es un poquito mas complejo..
debe sumar todas las cantidades de los pedidos que no hayan sido atendidos...

aquellos pedidos que ya fueron atendidos parcial o totalmente no debe sumar... y eso se hace con el query que puse mas arriba....

esperemos que newtron se pronuncie

fjcg02 31-03-2011 08:45:55

Se puede hacer de varias maneras, pero la solución de "libro" y más eficiente, es la que ha expuesto Casimiro.

En un examen, sacaría la nota máxima con esa respuesta.

Saludos

newtron 31-03-2011 09:40:17

Hola amigos.

Gracias a todos por vuestras respuestas.

En este caso la instrucción del amigo oscarac es la que me vale porque la instrucción del amigo casimiro no es lo que yo andaba buscando porque lo que me selecciona es la suma de todo el pedido en vez del artículo.

Como siempre gracias a todos por vuestra atención y un saludo.

fjcg02 31-03-2011 13:09:44

Hombre, no creo que haya que echarle demasiada imaginación ni tiempo para cambiar la consulta y agruparla por pedido, artículo.

Código SQL [-]
select pedido, articulo, sum(cantidad)
from PRUEBA004
group by pedido, articulo
having sum(servido)>0

Saludos

newtron 31-03-2011 13:23:59

Cita:

Empezado por fjcg02 (Mensaje 395211)
Hombre, no creo que haya que echarle demasiada imaginación ni tiempo para cambiar la consulta y agruparla por pedido, artículo.

No hombre, no es eso. Lo que quiero decir es que o no he sabido explicarme correctamente o Casimiro no me ha pillado la idea. La idea era hacer un total de la cantidad de artículos pedida por artículo siempre y cuando ningún artículo del pedido hubiera sido servido independientemente del artículo que sea. Con la consulta que me propone Casimiro creo que hace referencia a la cantidad servida en la línea del pedido, no en la suma del total del pedido. No sé si me explico pero la instrucción de oscarac me sirve perfectamente.

Gracias y un saludo.

Casimiro Notevi 31-03-2011 14:06:20

Tú lo que quieres es librarte del premio que me he ganado :D

Cita:

Empezado por fjcg02
Se puede hacer de varias maneras, pero la solución de "libro" y más eficiente, es la que ha expuesto Casimiro.

Eso, eso, que me den mi premio :D

oscarac 31-03-2011 15:41:01

por eso siempre es bueno mencionar el resultado que se espera obtener con algun ejemplo en pantalla, cosa que asi tenemos una mejor idea

y premio para mi no hay? :(
jejejeje

newtron 31-03-2011 16:40:56

Buenooooooo, no os apureis que con lo torpe que soy vais a tener todos oportunidad de demostrar vuestras virtudes :p


La franja horaria es GMT +2. Ahora son las 09:37:15.

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