#1 [SQL] Consulta gigante SQL en 1 sentencia
Tengo esta consulta en SQL
----
(SELECT precio_unitario * historia_fichas_productos.cantidad +
(precio_unitario * alicuota)*historia_fichas_productos.cantidad AS importe,
tecnicos.cod_tecnico AS cod_tecnico, nombre_tecnico AS tecnico, descripcion_modelo, historia_fichas_productos.cod_ficha AS ficha
FROM historia_fichas_productos INNERJOIN tecnicos ON historia_fichas_productos.cod_tecnico = tecnicos.cod_tecnico
INNERJOIN modelos ON modelos.cod_modelo = historia_fichas_productos.cod_modelo
INNERJOIN articulos ON articulos.cod_nro_serie = historia_fichas_productos.cod_nro_serie
WHERE(tecnicos.cuenta_producto = 1 or articulos.servicio = 1) AND tecnicos.cod_tecnico = 1 AND modelos.cod_modelo <>-1 AND modelos.cod_modelo <>-2 AND articulos.numero_serie isNULLAND
historia_fichas_productos.eliminado = 0 AND historia_fichas_productos.fecha_hora_ficha >=parametrovariable AND historia_fichas_productos.fecha_hora_ficha <= parametrovariable2 AND historia_fichas_productos.fecha_hora_ficha IN
(SELECT max(historia_fichas_productos.fecha_hora_ficha)FROM historia_fichas_productos WHERE historia_fichas_productos.eliminado = 0
GROUPBY precio_unitario, numero_serie,cod_modelo,tipo_pago, cod_nro_serie)
GROUPBY historia_fichas_productos.cod_ficha, tecnicos.cod_tecnico, nombre_tecnico, descripcion_modelo, modelos.cod_modelo,
historia_fichas_productos.cantidad, precio_unitario, alicuota )UNION
(SELECT precio_unitario * historia_fichas_productos.cantidad +
(precio_unitario * alicuota) AS importe,
tecnicos.cod_tecnico AS cod_tecnico, nombre_tecnico AS tecnico, descripcion_modelo, historia_fichas_productos.cod_ficha AS ficha
FROM historia_fichas_productos INNERJOIN tecnicos ON historia_fichas_productos.cod_tecnico = tecnicos.cod_tecnico
INNERJOIN modelos ON modelos.cod_modelo = historia_fichas_productos.cod_modelo INNERJOIN articulos ON
articulos.cod_nro_serie = historia_fichas_productos.cod_nro_serie
WHERE(tecnicos.cuenta_producto = 1 OR articulos.servicio = 1) AND tecnicos.cod_tecnico = 1 AND modelos.cod_modelo <>-1 AND modelos.cod_modelo <>-2 AND articulos.numero_serie is NOT NULL AND
historia_fichas_productos.eliminado = 0 AND historia_fichas_productos.fecha_hora_ficha >=parametrovariable AND historia_fichas_productos.fecha_hora_ficha <=parametrovariable2 AND historia_fichas_productos.fecha_hora_ficha IN
(SELECTmax(historia_fichas_productos.fecha_hora_ficha)FROM historia_fichas_productos WHERE historia_fichas_productos.eliminado = 0
GROUPBY precio_unitario, numero_serie,cod_modelo,tipo_pago, cod_nro_serie)
GROUPBY historia_fichas_productos.cod_ficha, tecnicos.cod_tecnico, nombre_tecnico, descripcion_modelo, modelos.cod_modelo,
historia_fichas_productos.cantidad, precio_unitario, alicuota)
UNION
(SELECT precio_unitario * historia_fichas_productos.cantidad +(precio_unitario * alicuota)*historia_fichas_productos.cantidad AS importe,
fichas.cod_tecnico_retiro AS cod_tecnico, tecnicos.usuario AS tecnico, descripcion_modelo, fichas.cod_ficha as ficha
FROM fichas INNERJOIN historia_fichas_productos
ON fichas.cod_ficha = historia_fichas_productos.cod_ficha INNERJOIN tecnicos ON tecnicos.cod_tecnico =
fichas.cod_tecnico_retiro INNERJOIN modelos ON historia_fichas_productos.cod_modelo = modelos.cod_modelo
INNERJOIN articulos ON historia_fichas_productos.cod_modelo = articulos.cod_modelo
WHERE tecnicos.cuenta_servicio = 1 AND cod_tecnico_retiro = 1 AND modelos.cod_modelo =-1
AND historia_fichas_productos.eliminado = 0 AND historia_fichas_productos.numero_serie is NULL AND historia_fichas_productos.fecha_hora_ficha >=parametrovariable
AND historia_fichas_productos.fecha_hora_ficha <=parametrovariable2
AND fecha_hora_ficha IN
(SELECTmax(fecha_hora_ficha)FROM historia_fichas_productos WHERE
historia_fichas_productos.eliminado = 0 GROUPBY precio_unitario, numero_serie,cod_modelo,tipo_pago, cod_nro_serie
)
GROUPBY fichas.cod_tecnico_retiro, tecnicos.usuario, descripcion_modelo, fichas.cod_ficha, historia_fichas_productos.cantidad, precio_unitario, alicuota )
UNION
(SELECT precio_unitario * historia_fichas_productos.cantidad +(precio_unitario * alicuota)*historia_fichas_productos.cantidad AS importe,
fichas.cod_tecnico_llevo AS cod_tecnico, tecnicos.usuario AS tecnico, descripcion_modelo, fichas.cod_ficha AS ficha
FROM fichas INNERJOIN historia_fichas_productos
ON fichas.cod_ficha = historia_fichas_productos.cod_ficha INNERJOIN tecnicos ON tecnicos.cod_tecnico =
fichas.cod_tecnico_llevo INNERJOIN modelos ON historia_fichas_productos.cod_modelo = modelos.cod_modelo
INNERJOIN articulos ON historia_fichas_productos.cod_modelo = articulos.cod_modelo
WHERE tecnicos.cuenta_servicio = 1 and cod_tecnico_llevo = 1 AND modelos.cod_modelo =-2
AND historia_fichas_productos.eliminado = 0 and historia_fichas_productos.numero_serie isNULLAND historia_fichas_productos.fecha_hora_ficha >=parametrovariable AND historia_fichas_productos.fecha_hora_ficha <=parametrovariable2
AND fecha_hora_ficha IN
(SELECTmax(fecha_hora_ficha)FROM historia_fichas_productos WHERE
historia_fichas_productos.eliminado = 0 GROUPBY precio_unitario, numero_serie,cod_modelo,tipo_pago, cod_nro_serie
)
GROUPBY fichas.cod_tecnico_llevo, tecnicos.usuario, descripcion_modelo, fichas.cod_ficha, historia_fichas_productos.cantidad, precio_unitario, alicuota )
---
Necesito al resultado de esta consulta, tratarla como una tabla y ponerla en el FROM de otra consulta, de esta forma
SELECT sum(importe) as total FROM (/ todo el chorro de consulta anterior / ) GROUP BY cod_tecnico
Muchas veces puse consulta en los FROM para tratarlos como tablas y no tuve problemas, pero en este caso me tira error y me consta que el primer chorro de consulta funciona bien. Que puede ser?
----
(SELECT precio_unitario * historia_fichas_productos.cantidad +
(precio_unitario * alicuota)*historia_fichas_productos.cantidad AS importe,
tecnicos.cod_tecnico AS cod_tecnico, nombre_tecnico AS tecnico, descripcion_modelo, historia_fichas_productos.cod_ficha AS ficha
FROM historia_fichas_productos INNERJOIN tecnicos ON historia_fichas_productos.cod_tecnico = tecnicos.cod_tecnico
INNERJOIN modelos ON modelos.cod_modelo = historia_fichas_productos.cod_modelo
INNERJOIN articulos ON articulos.cod_nro_serie = historia_fichas_productos.cod_nro_serie
WHERE(tecnicos.cuenta_producto = 1 or articulos.servicio = 1) AND tecnicos.cod_tecnico = 1 AND modelos.cod_modelo <>-1 AND modelos.cod_modelo <>-2 AND articulos.numero_serie isNULLAND
historia_fichas_productos.eliminado = 0 AND historia_fichas_productos.fecha_hora_ficha >=parametrovariable AND historia_fichas_productos.fecha_hora_ficha <= parametrovariable2 AND historia_fichas_productos.fecha_hora_ficha IN
(SELECT max(historia_fichas_productos.fecha_hora_ficha)FROM historia_fichas_productos WHERE historia_fichas_productos.eliminado = 0
GROUPBY precio_unitario, numero_serie,cod_modelo,tipo_pago, cod_nro_serie)
GROUPBY historia_fichas_productos.cod_ficha, tecnicos.cod_tecnico, nombre_tecnico, descripcion_modelo, modelos.cod_modelo,
historia_fichas_productos.cantidad, precio_unitario, alicuota )UNION
(SELECT precio_unitario * historia_fichas_productos.cantidad +
(precio_unitario * alicuota) AS importe,
tecnicos.cod_tecnico AS cod_tecnico, nombre_tecnico AS tecnico, descripcion_modelo, historia_fichas_productos.cod_ficha AS ficha
FROM historia_fichas_productos INNERJOIN tecnicos ON historia_fichas_productos.cod_tecnico = tecnicos.cod_tecnico
INNERJOIN modelos ON modelos.cod_modelo = historia_fichas_productos.cod_modelo INNERJOIN articulos ON
articulos.cod_nro_serie = historia_fichas_productos.cod_nro_serie
WHERE(tecnicos.cuenta_producto = 1 OR articulos.servicio = 1) AND tecnicos.cod_tecnico = 1 AND modelos.cod_modelo <>-1 AND modelos.cod_modelo <>-2 AND articulos.numero_serie is NOT NULL AND
historia_fichas_productos.eliminado = 0 AND historia_fichas_productos.fecha_hora_ficha >=parametrovariable AND historia_fichas_productos.fecha_hora_ficha <=parametrovariable2 AND historia_fichas_productos.fecha_hora_ficha IN
(SELECTmax(historia_fichas_productos.fecha_hora_ficha)FROM historia_fichas_productos WHERE historia_fichas_productos.eliminado = 0
GROUPBY precio_unitario, numero_serie,cod_modelo,tipo_pago, cod_nro_serie)
GROUPBY historia_fichas_productos.cod_ficha, tecnicos.cod_tecnico, nombre_tecnico, descripcion_modelo, modelos.cod_modelo,
historia_fichas_productos.cantidad, precio_unitario, alicuota)
UNION
(SELECT precio_unitario * historia_fichas_productos.cantidad +(precio_unitario * alicuota)*historia_fichas_productos.cantidad AS importe,
fichas.cod_tecnico_retiro AS cod_tecnico, tecnicos.usuario AS tecnico, descripcion_modelo, fichas.cod_ficha as ficha
FROM fichas INNERJOIN historia_fichas_productos
ON fichas.cod_ficha = historia_fichas_productos.cod_ficha INNERJOIN tecnicos ON tecnicos.cod_tecnico =
fichas.cod_tecnico_retiro INNERJOIN modelos ON historia_fichas_productos.cod_modelo = modelos.cod_modelo
INNERJOIN articulos ON historia_fichas_productos.cod_modelo = articulos.cod_modelo
WHERE tecnicos.cuenta_servicio = 1 AND cod_tecnico_retiro = 1 AND modelos.cod_modelo =-1
AND historia_fichas_productos.eliminado = 0 AND historia_fichas_productos.numero_serie is NULL AND historia_fichas_productos.fecha_hora_ficha >=parametrovariable
AND historia_fichas_productos.fecha_hora_ficha <=parametrovariable2
AND fecha_hora_ficha IN
(SELECTmax(fecha_hora_ficha)FROM historia_fichas_productos WHERE
historia_fichas_productos.eliminado = 0 GROUPBY precio_unitario, numero_serie,cod_modelo,tipo_pago, cod_nro_serie
)
GROUPBY fichas.cod_tecnico_retiro, tecnicos.usuario, descripcion_modelo, fichas.cod_ficha, historia_fichas_productos.cantidad, precio_unitario, alicuota )
UNION
(SELECT precio_unitario * historia_fichas_productos.cantidad +(precio_unitario * alicuota)*historia_fichas_productos.cantidad AS importe,
fichas.cod_tecnico_llevo AS cod_tecnico, tecnicos.usuario AS tecnico, descripcion_modelo, fichas.cod_ficha AS ficha
FROM fichas INNERJOIN historia_fichas_productos
ON fichas.cod_ficha = historia_fichas_productos.cod_ficha INNERJOIN tecnicos ON tecnicos.cod_tecnico =
fichas.cod_tecnico_llevo INNERJOIN modelos ON historia_fichas_productos.cod_modelo = modelos.cod_modelo
INNERJOIN articulos ON historia_fichas_productos.cod_modelo = articulos.cod_modelo
WHERE tecnicos.cuenta_servicio = 1 and cod_tecnico_llevo = 1 AND modelos.cod_modelo =-2
AND historia_fichas_productos.eliminado = 0 and historia_fichas_productos.numero_serie isNULLAND historia_fichas_productos.fecha_hora_ficha >=parametrovariable AND historia_fichas_productos.fecha_hora_ficha <=parametrovariable2
AND fecha_hora_ficha IN
(SELECTmax(fecha_hora_ficha)FROM historia_fichas_productos WHERE
historia_fichas_productos.eliminado = 0 GROUPBY precio_unitario, numero_serie,cod_modelo,tipo_pago, cod_nro_serie
)
GROUPBY fichas.cod_tecnico_llevo, tecnicos.usuario, descripcion_modelo, fichas.cod_ficha, historia_fichas_productos.cantidad, precio_unitario, alicuota )
---
Necesito al resultado de esta consulta, tratarla como una tabla y ponerla en el FROM de otra consulta, de esta forma
SELECT sum(importe) as total FROM (/ todo el chorro de consulta anterior / ) GROUP BY cod_tecnico
Muchas veces puse consulta en los FROM para tratarlos como tablas y no tuve problemas, pero en este caso me tira error y me consta que el primer chorro de consulta funciona bien. Que puede ser?
Editado por Daidalus - 29.08.2008 11:39 hs. | Motivo: PR
0