2 Replies Latest reply: Dec 5, 2012 11:06 AM by aleksguz RSS

    Help with query get 2 rows in a row

    977029
      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
          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
            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