Consulta para obtener datos en base a unas coorden
Buenas tardes a toda la gran comunidad de LWP, soy novato en programacion en bases de datos y mas en Oracle, por tal vengo solicitando su valiosa colaboracion, Necesito una consulta que dado el numero de un trafo, me ubique los trafos vecinos a el mas unos cuantos datos adicionales. La informacion de cada trafo esta almacenada en una tabla llamada TECNI, en esta lo principal para mi consulta es el numero del trafo y las coordenadas X y Y, estas coordenadas me dan la ubicacion geografica del trafo y de ahi puedo obtener sus vecinos en un rango. La idea es mediante una aplicacion pido al usuario el numero del trafo, un periodo, este periodo es para obtener algunos datos que se registraron para este trafo en ese periodo, dicho periodo lo ingreso en el formato YYYYMM, ejemplo: 201511, eso seria noviembre del 2015, y un area a consultar, el cual puede ser un entero por ejemplo 1, 2 o 3.
Entonces dado un trafo N° 1T0050, el cual tiene unas coordenadas en X = a 72.25685 y en Y = 5.3698, y si el area es 1, me retorne todos aquellos trafos vecinos que sus coordenas X y Y esten entre los valores del trafo principal sumandoles el area y restandoles el area, para que coincidan dentro del plano cartesiano que se genera. Subí una imagen, espero se vea para mejor comprension.
Aqui tengo parte de la consulta, donde pido los datos y trato de obtener el resultado pero no me puedo mover sobre el eje de las Y, si me pueden colaborar estare eternamente agradecido.
[sql]
select t.PTO_TRANSF,ALIMENTADOR,DECODE(t.PTO_TRANSF,’&Trafo’,’Principal’,’Vecino’) Buscado,
t.COORDENADA_X,t.COORDENADA_y,c.direccion,b.nombre Barrio,m.nombre Municipio,
be.perdida_total_mensualizada perdida,
(select p.perdida_total_mensualizada from balance_energia p where p.trafo = be.trafo and P.periodo = ‘201507’) PANTERIOR
,be.indica_edificio,be.grupo_contratacion,be.VAR_ESTADO_TRAF ,
( TO_CHAR(C.SUCURSAL,’0000′)||TO_CHAR(C.SECTOR,’00’)||TO_CHAR(C.ZONA,’000′)||TO_CHAR(C.CORRELATIVO_RUTA,’000000′) ) RUTA
from tecni t, cliente c, balance_energia be, BARRIOS B,municipio m, TRANSFORMADORES T
where
trim(c.transformador) = t.PTO_TRANSF
and t.numero_cliente = c.numero_cliente
–AND C.SUCURSAL IN (1000,2000,4000)
and c.tarifa = ‘6201’
and c.estado_cliente != 2
AND T.TRF_NRO = TRIM(C.TRANSFORMADOR)
AND C.NUMERO_CLIENTE = T.TRF_CODIGO_CUENTA
and t.COORDENADA_X is not null
and be.trafo = t.PTO_TRANSF
and be.periodo = ‘201509’
and c.municipio = m.cod_municipio
and b.codigo_barrio (+) = c.comuna
and b.municipio (+) = c.municipio
AND t.COORDENADA_X >=ROUND((SELECT (tecni.COORDENADA_X – 0.000800)
FROM tecni,cliente
WHERE tECNI.PTO_TRANSF = trim(cliente.transformador)
and alimentador like concat(substr( (SELECT t.ALIMENTADOR FROM tecni WHERE tecni.numero_cliente = c.numero_cliente),0,4),’%’)
and tECNI.PTO_TRANSF =’&Trafo’
and cliente.tarifa = 6201
AND TECNI.NUMERO_CLIENTE = CLIENTE.NUMERO_CLIENTE
AND C.SECTOR = CLIENTE.SECTOR),6)
AND t.COORDENADA_X <= ROUND((SELECT (tecni.COORDENADA_X + 0.000800)
FROM tecni,cliente
WHERE tECNI.PTO_TRANSF = trim(cliente.transformador)
and alimentador like concat(substr( (SELECT t.ALIMENTADOR FROM tecni WHERE tecni.numero_cliente = c.numero_cliente),0,4),'%')
AND tECNI.PTO_TRANSF ='&Trafo'
and cliente.tarifa = 6201
AND TECNI.NUMERO_CLIENTE = CLIENTE.NUMERO_CLIENTE
AND C.SECTOR = CLIENTE.SECTOR),6)
order by t.coordenada_x
;
[/sql]
[IMG]http://i64.tinypic.com/21mzs03.jpg[/IMG]