This discussion is archived
2 Replies Latest reply: Dec 5, 2012 9:06 AM by aleksguz RSS

Help with query get 2 rows in a row

977029 Newbie
Currently Being Moderated
I am using this query

select sfc.id_canal, sfc.frecuencia||' '||sfc.unidad||' para '||decode(sfc.tipo_frecuencia, 'TX', 'Transmisión', 'RX', 'Recepción', null, 'X') Frecuencia
from sm_estaciones_costera sec, sm_naves_costeras snc, sm_estaciones_barco seb, nv_naves n, sm_estaciones_barco_canales ebc,
sm_canales sc, sm_frecuencias_canal sfc, sm_costera_licencias_radio clr,
ge_personas per, pt_puertos pue, ge_repartos rep, nv_tipos_naves ntn
where sec.id_estacion_costera = snc.id_estacion_costera
and clr.id_estacion_costera(+) = sec.id_estacion_costera
and sec.id_persona = per.id_persona
and sec.id_puerto = pue.id_puerto
and pue.id_reparto_regional = rep.id_reparto(+)
and snc.id_nave = seb.id_nave
and snc.id_nave = n.id_nave
and seb.id_nave = n.id_nave
and n.id_tipo_nave = ntn.id_tipo_nave
and seb.id_estacion_barco = ebc.id_estacion_barco(+)
and ebc.id_canal = sc.id_canal(+)
and sc.id_canal = sfc.id_canal(+)
and sec.estado = 'OPE'
and clr.fecha_caducidad > sysdate
and clr.fecha_emision> to_date('01/01/2012', 'dd/mm/yyyy')


it reurn the fololwing:

     NOMBRE     ID_CANAL     FRECUENCIA
     FORTICA     273     8.803 KHZ para Transmisión
     FORTICA     273     8.279 KHZ para Recepción
     MARIELLA     240     4.435 KHZ para Transmisión
     MARIELLA     240     4.143 KHZ para Recepción
     CALYPSO III     62     156.925 MHZ para Transmisión
     CALYPSO III     62     161.525 MHZ para Recepción
     CACHALOTE     37     156.350 MHZ para Transmisión
     CACHALOTE     37     160.950 MHZ para Recepción
     INTEGRITY      32     156.275 MHZ para Transmisión
     INTEGRITY      32     160.875 MHZ para Recepción
     INTEGRITY     276     8.812 KHZ para Transmisión
     INTEGRITY     276     8.288 KHZ para Recepción
     GUANTANAMERA     62     156.925 MHZ para Transmisión
     GUANTANAMERA     62     161.525 MHZ para Recepción
     ISABELLA II     69     157.025 MHZ para Transmisión
     ISABELLA II     69     161.625 MHZ para Recepción
     ISABELLA II 252     8.737 KHZ para Transmisión
     ISABELLA II 252     8.213 KHZ para Recepción
as you can see each ship(nave) uses the same chanel for 2 frequences so what I need is to show it like this

NOMBRE     ID_CANAL     FRECUENCIA TX FRECUENCIA RX
     FORTICA     273     8.803 KHZ para Transmisión 8.279 KHZ para Recepción
     MARIELLA     240     4.435 KHZ para Transmisión 4.143 KHZ para Recepción
CALYPSO III     62     156.925 MHZ para Transmisión 161.525 MHZ para Recepción
CACHALOTE     37     156.350 MHZ para Transmisión 160.950 MHZ para Recepción
INTEGRITY      32     156.275 MHZ para Transmisión 160.875 MHZ para Recepción
INTEGRITY     276     8.812 KHZ para Transmisión 8.288 KHZ para Recepción
GUANTANAMERA     62     156.925 MHZ para Transmisión 161.525 MHZ para Recepción
     ISABELLA II     69     157.025 MHZ para Transmisión 161.625 MHZ para Recepción
     ISABELLA II 252     8.737 KHZ para Transmisión 8.213 KHZ para Recepción
can any one help me with this query please
  • 1. Self-Join
    Frank Kulash Guru
    Currently Being Moderated
    Hi,

    That looks like a job for a self-join. If all the Recepcións (and only the Recepcións) were in a table called r, and all the Transmisións (and only the Transmisións) were in a separate table called t, you would know how to join those two tables, right? Do the same thing, only use the same table name for both tables, and give them the aliases r and t.


     

    I hope this answers your question.
    If not, post a little sample data (CREATE TABLE and INSERT statements, relevant columns only) for all tables involved, and also post the results you want from that data.
    Explain, using specific examples, how you get those results from that data.
    Simplify the problem as much as possible. Include only the parts that you don't already know how to do.
    Always say which version of Oracle you're using (e.g., 11.2.0.2.0).
    See the forum FAQ {message:id=9360002}
  • 2. Re: Help with query get 2 rows in a row
    aleksguz Newbie
    Currently Being Moderated
    Try with this

    SELECT sfc.id_canal,
    MAX(
    CASE WHEN sfc.tipo_frecuencia = 'TX' THEN
    sfc.frecuencia||' '||sfc.unidad||' para Transmisión'
    ELSE NULL END
    ) frec1,
    --
    MAX(
    CASE WHEN sfc.tipo_frecuencia = 'RX' THEN
    sfc.frecuencia||' '||sfc.unidad||' para Recepcion'
    ELSE NULL END
    )frec2
    FROM
    sm_estaciones_costera sec,
    sm_naves_costeras snc,
    sm_estaciones_barco seb,
    nv_naves n,
    sm_estaciones_barco_canales ebc,
    sm_canales sc,
    sm_frecuencias_canal sfc,
    sm_costera_licencias_radio clr,
    ge_personas per,
    pt_puertos pue,
    ge_repartos rep,
    nv_tipos_naves ntn
    WHERE
    sec.id_estacion_costera = snc.id_estacion_costera AND
    clr.id_estacion_costera(+) = sec.id_estacion_costera AND
    sec.id_persona = per.id_persona AND
    sec.id_puerto = pue.id_puerto AND
    pue.id_reparto_regional = rep.id_reparto(+) AND
    snc.id_nave = seb.id_nave AND
    snc.id_nave = n.id_nave AND
    seb.id_nave = n.id_nave AND
    n.id_tipo_nave = ntn.id_tipo_nave AND
    seb.id_estacion_barco = ebc.id_estacion_barco(+) AND
    ebc.id_canal = sc.id_canal(+) AND
    sc.id_canal = sfc.id_canal(+) AND
    sec.estado = 'OPE' AND
    clr.fecha_caducidad > SYSDATE AND
    clr.fecha_emision> TO_DATE('01/01/2012', 'dd/mm/yyyy')
    GROUP BY sfc.id_canal

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points