SQL - COMO QUITAR LAS UNIDADES CON VALOR CERO

 
Vista:
sin imagen de perfil

COMO QUITAR LAS UNIDADES CON VALOR CERO

Publicado por Nico Monzon (12 intervenciones) el 07/06/2017 18:58:04
Hola a tod@s, estoy sacando de mi BD los pedidos pendientes, tengo la siguiente consulta:

1
2
3
4
5
6
7
8
9
10
11
12
13
select ped1_num, ped1_fecha_pedido, prove_cuenta, prove_nombre,
sum (ped2_precio_art) as precio_artiuclo, sum(ped2_uni_ped) as uni_pedidas,
sum (ped2_uni_ser) as uni_servidas,
sum (ped2_uni_ent) as uni_transito,
sum(case when ped2_uni_ped - ped2_uni_ent - ped2_uni_ser - ped2_uni_bon > 0 then ped2_uni_ped - ped2_uni_ent - ped2_uni_ser - ped2_uni_bon else 0 end) as uni_pdte
From  pedido1,pedido2, proved01
Where ped1_num = ped2_num and  ped1_proveedor = prove_cuenta
AND ped1_proveedor between 400010001 AND 400312900
AND ped1_alma between 2 AND 40
AND ped1_fecha_pedido between to_date('26/04/2017', 'dd/mm/yyyy')
AND to_date('26/04/2017', 'dd/mm/yyyy')
Group by ped1_num, ped1_fecha_pedido, prove_cuenta, prove_nombre
order by ped1_num;


ME DEVUELVE LOS SIGUIENTE:

1
2
3
4
5
6
7
8
717001205	26/04/17	400010944	ISOFIX-WALRAVEN IBERIA S.L.U. 	10,5371	2800	2700	0	100
717001206	26/04/17	400010787	AGRI-LEV S.L.                 	0,538	450	450	0	0
717001207	26/04/17	400010915	GEBERIT S.A                   	622,1	680	699	0	8
717001208	26/04/17	400010028	PENTAX s.p.a.                 	225,87	5	0	0	5
717001209	26/04/17	400011022	SUFOCAN ARCHIPIELAGO S.L.     	44,97	3	3	0	0
717001210	26/04/17	400010627	BELGICAST INTERNACIONAL, S.L. 	1635,97	153	108	0	45
717001211	26/04/17	400010139	WATTS IND. IBERICA S.A.       	203,14	21	0	21	0
717001212	26/04/17	400010578	ORLANDO s.r.l.                	2572	2	0	0	2

NCESITARIA SACAR SOLO LOS PEDIDOS QUE TENGAS UNIDADES PENDIENTES DISTINTAS A CERO

ALGUIEN ME PODRIA AYUDAR POR FAVOR

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
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

COMO QUITAR LAS UNIDADES CON VALOR CERO

Publicado por Isaias (1921 intervenciones) el 07/06/2017 19:07:27
¿Cual seria el problema?


WHERE sum(case when ped2_uni_ped - ped2_uni_ent - ped2_uni_ser - ped2_uni_bon > 0 then ped2_uni_ped - ped2_uni_ent - ped2_uni_ser - ped2_uni_bon else 0 end) > 0
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

COMO QUITAR LAS UNIDADES CON VALOR CERO

Publicado por leonardo_josue (1173 intervenciones) el 07/06/2017 20:07:25
Hola Nico Monzon;

A reserva de que nos digas qué tal va la consulta que comenta Isaías, creo que no puedes filtrar en el WHERE porque estás agrupando... No nos dices con qué BD's estás trabajando, pero creo que tendrías problemas...


Puedes probar esta otras soluciones:

1, Filtrar en la sección HAVING:

1
2
3
4
5
6
7
...
GROUP BY
  ped1_num, ped1_fecha_pedido, prove_cuenta, prove_nombre
HAVING
  SUM(CASE WHEN ped2_uni_ped - ped2_uni_ent - ped2_uni_ser - ped2_uni_bon > 0
           THEN ped2_uni_ped - ped2_uni_ent - ped2_uni_ser - ped2_uni_bon
		   ELSE 0 END) > 0

2. Usar subconsultas:

1
2
3
4
SELECT  *
FROM
( aquí pones tu consulta, tal como la tienes) alias_tabla
WHERE alias_tabla.uni_pdte > 0

Finalmente una recomendación, UTILIZA JOIN's en lugar de listar las tablas en el FROM y hacer las uniones en el WHERE, es decir

en lugar de hacer esto:

1
2
3
...
FROM tabla1, tabla2 WHERE tabla1.campo = tabla2.campo
...

haz esto:

1
2
3
4
...
FROM tabla1
INNER JOIN tabla2 ON tabla1.campo = tabla2.campo:
...


El resultado es el mismo, pero tiene mejor desempeño.

haz la prueba y nos comentas.

Saludos
Leo.
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
sin imagen de perfil

COMO QUITAR LAS UNIDADES CON VALOR CERO

Publicado por MUCHISIMAS GRACIAS LEO (12 intervenciones) el 08/06/2017 09:33:03
Utilizando esta consulta

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
select ped1_num, ped1_fecha_pedido, prove_cuenta, prove_nombre,
sum (ped2_precio_art) as precio_artiuclo, sum(ped2_uni_ped) as uni_pedidas,
sum (ped2_uni_ser) as uni_servidas,
sum (ped2_uni_ent) as uni_transito,
sum(case when ped2_uni_ped - ped2_uni_ent - ped2_uni_ser - ped2_uni_bon> 0 then ped2_uni_ped - ped2_uni_ent - ped2_uni_ser - ped2_uni_bon else 0 end) as uni_pdte
From  pedido1,pedido2, proved01
Where ped1_num = ped2_num and  ped1_proveedor = prove_cuenta
AND ped1_proveedor between 400010001 AND 400312900
AND ped1_alma between 2 AND 40
AND ped1_fecha_pedido between to_date('26/04/2017', 'dd/mm/yyyy')
AND to_date('26/04/2017', 'dd/mm/yyyy')
GROUP BY
  ped1_num, ped1_fecha_pedido, prove_cuenta, prove_nombre
HAVING
  SUM(CASE WHEN ped2_uni_ped - ped2_uni_ent - ped2_uni_ser - ped2_uni_bon > 0
           THEN ped2_uni_ped - ped2_uni_ent - ped2_uni_ser - ped2_uni_bon
		   ELSE 0 END) > 0;

ME FUNCIONA A LA PERFECCION. MIL AGRADECIEMIENTOS
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