PostgreSQL - consulta con filtrado de datos

   
Vista:

consulta con filtrado de datos

Publicado por Juanma (1 intervención) el 07/12/2011 18:58:35
Hola,

Tengo un problema para realizar una consulta de la que quiero extraer todos los código de productos cuyo peso no sea de 0.
El problema es que el peso viene definido en un nuevo campo calculado de la consulta al cual no puedo hacer referencia (ya sea por falta de conocimientos o por que realmente no se puede).
El tema es que no consigo que salga correctamente.
Como curiosidad, si ejecuto la consulta sin que los kilos de los productos sean 0, no muestra resultado (cuando tendría que hacer lo contrario). Y si algún producto tiene 0 kg, entonces es cuando muestra todo el listado de productos.

Os dejo el script

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
SELECT
	le.id_lote_entrada AS ID,
	le.cod_lote_entrada AS CODIGO,
	le.fecha_caducidad,
	CASE
		WHEN sum(les.kg) is null AND sum(lt.peso_neto) is null
			THEN sum(le.peso_neto)
 
		WHEN sum(lt.peso_neto) is null
			THEN (sum(le.peso_neto) - sum(les.kg))
 
		WHEN sum(les.kg) is null
			THEN (sum(le.peso_neto) - sum(lt.peso_neto))
 
		ELSE (sum(le.peso_neto) - sum(les.kg) - sum(lt.peso_neto))
	END AS PESO
FROM lotes_entrada AS le LEFT JOIN lotes_transformado AS lt
 
ON le.id_lote_entrada = lt.id_lote_entrada
 
	LEFT JOIN lotes_ent_salida AS les
 
ON
	le.id_lote_entrada = les.id_lote_entrada
 
WHERE le.id_palet_entrada = 220
 
AND le.id_lote_entrada not in
	(
	SELECT le.id_lote_entrada
	FROM lotes_entrada AS le, lotes_transformado AS lt
	WHERE le.id_lote_entrada = lt.id_lote_entrada
	AND lt.peso_neto = le.peso_neto
	)
 
AND le.id_lote_entrada not in
	(
	SELECT le.id_lote_entrada
	FROM lotes_entrada AS le, lotes_ent_salida AS les
	WHERE le.id_lote_entrada = les.id_lote_entrada
	AND les.kg = le.peso_neto
	)
 
AND le.id_lote_entrada not in
	(
	SELECT
	CASE
		WHEN (sum(le.peso_neto) - sum(lt.peso_neto)) - sum(les.kg) = 0
			THEN le.id_lote_entrada
 
	END AS id_lote_entrada
	FROM lotes_entrada AS le, lotes_transformado AS lt, lotes_ent_salida AS les
	WHERE le.id_lote_entrada = lt.id_lote_entrada
	AND le.id_lote_entrada = les.id_lote_entrada
	GROUP BY le.id_lote_entrada
	)
 
GROUP BY le.cod_lote_entrada, le.fecha_caducidad, le.id_lote_entrada
ORDER BY le.fecha_caducidad ASC, le.cod_lote_entrada;


Un saludo y 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