none
Subconsulta solo retorna 1 fila. RRS feed

  • Pregunta

  • Buenas, tengo una consulta la cual adentro tiene una subconsulta.

    Si ejecuto la consulta principal sola, me retorna 15 filas. Y si ejecuto la subconsulta aparte tambien me retorna 15 filas por lo que no entiendo porque razón al meter la subconsulta dentro de la principal obtengo el error de que solo me retorna una fila.

    SELECT IR.cliente as idCliente, IR.domicilio as idDomicilio,  idComprobante, soda as colSSaldo, (SELECT SUM(agua4 + agua10 + agua12 + agua20 + agua25)
    FROM itemsReparto WHERE reparto = 2 GROUP BY idComprobante) as colASaldo, cajon as colCSaldo, canasta as colCCSaldo, pie as colPSaldo, dispenser as colDSaldo, saldo as colSCCSaldo
                                     FROM itemsReparto IR
                                     INNER JOIN Clientes C ON C.idCliente = IR.cliente
                                     INNER JOIN Domicilios D ON D.idDomicilio = IR.domicilio
                                     INNER JOIN Calles CC ON D.Calle = CC.idCalle
                                     WHERE reparto = 2

    Estuve leyendo y leí que eso lo soluciono con un IN, pero en este caso me dice que la columna colASaldo no existe en la tabla (lo que es correcto, ya que es solo un alias que yo le pongo a la suma de mis columas agua4+agua10+agua12+agua20+agua25).

    Si yo hago el IN colocando por ejemplo 

    agua4 IN (SELECT SUM(agua4 + agua10 + agua12 + agua20 + agua25)
    FROM itemsReparto WHERE reparto = 2 GROUP BY idComprobante)
    Solo me retorna la columna agua4 y no la suma.

    Intenté tambien hacer algo así pero con los mismos resultados.

    SELECT IR.cliente as idCliente, IR.domicilio as idDomicilio, idComprobante, soda as colSSaldo, SELECT SUM(agua4 + agua10 + agua12 + agua20 + agua25) IN (SELECT agua4, agua10, agua12, agua20, agua25
    FROM itemsReparto
    WHERE reparto = 2
    GROUP BY idComprobante), cajon as colCSaldo, canasta as colCCSaldo, pie as colPSaldo, dispenser as colDSaldo, saldo as colSCCSaldo
                                     FROM itemsReparto IR
                                     INNER JOIN Clientes C ON C.idCliente = IR.cliente
                                     INNER JOIN Domicilios D ON D.idDomicilio = IR.domicilio
                                     INNER JOIN Calles CC ON D.Calle = CC.idCalle
                                     WHERE reparto = 2


    Espero su ayuda para resolver este problema, muchas gracias.


    • Editado b0nete jueves, 30 de junio de 2016 21:22
    jueves, 30 de junio de 2016 21:21

Respuestas

  • b0nete,

    Pienso que si ejecutas la primera consulta que muestras deberías obtener el error de:

    La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión.

    Y eso porque la subconsulta al formar parte de la lista de selección debería devolver un valor escalar, pero -según mencionas- cuando ejecutas la sub-consulta por separado obtienes 15 filas, eso no es correcto.

    Pienso que lo que tienes que hacer es una subconsulta correlacionada con la consulta externa:

    SELECT 
    	<...>
    	(SELECT SUM(agua4 + agua10 + agua12 + agua20 + agua25) FROM itemsReparto WHERE idComprobante = IR.idComprobante) as colASaldo, 
    	<...>
    FROM 
    	itemsReparto IR

    Nota que la subconsulta ahora está correlacionada con la consulta externa en base a la columna [idComprante].

    Esperamos tus comentarios.


    • Propuesto como respuesta José De Alva viernes, 8 de julio de 2016 21:09
    • Marcado como respuesta José De Alva miércoles, 13 de julio de 2016 14:38
    jueves, 30 de junio de 2016 21:43