Resultados 1 al 10 de 10

Problema Sql

  1. #1 Problema Sql 
    Avanzado
    Fecha de ingreso
    Sep 2002
    Ubicación
    En mi chavola
    Mensajes
    194
    Descargas
    4
    Uploads
    0
    ¡Hola!

    Madre mía cuanto tiempo sin postear por aquí. Me alegro de que sigáis en el pié del cañón .

    Venía para haceros una consulta... el caso es que llevo toda la tarde intentando hacer una consulta SQL, que igual es una tontería pero me tiene obcecado... y esperaba que me pudierais ayudar ^_^.

    Os explico:
    Hay 3 tablas relacionadas como se ve en esta imagen:
    Relaciones
    Como podéis apreciar hay una tabla cabecera de facturas, una tabla de lineas de facturas y una tabla de proveedores.

    Donde; INVOICE_NUM -> NUMERO DE FACTURA
    INVOICE_DATE -> FECHA DE FACTURA
    AMOUNT -> IMPORTE DE LÍNEA DE FACTURA
    SEMENT1 -> CIF DEL PROVEEDOR

    La consulta que tengo que realizar es la siguiente;
    Hay que obtener las facturas realizadas a lo largo del 2011 con un importe de la factura (osea la suma de las lineas de la factura) mayores que 300 €.



    Y nada, que no lo consigo, así que cualquier aporte será de agradecer.

    Gracias por anticipado.
    Me alegro de haber vuelto por aquí después de tanto tiempo .

    ¡Saludos!
    Última edición por The_chacal; 06-03-2012 a las 22:08
    ---==Є£~CHΔCΔL==---

    ««--La curiosidad mató al gato, a mi me mostro las puertas--»»
    http://www.hacktheuniverse.tk
    Citar  
     

  2. #2  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Aunque no se especifican los tipos de datos (he considerado todos los campos numéricos), ni tampoco se especifica el motor de base de datos (mysql, oracle, etc... yo apostaría a que se trata de Access por lo "cutre" y poco atractivos que son los modelos ER ), en SQL estándar sería algo así:

    Código:
    SELECT CF.INVOICE_ID
    FROM CABECERAFACTURAS AS CF
    WHERE CF.INVOICE_DATE=2011 AND
    EXISTS
        (SELECT SUM(LINFAC.AMOUNT)
         FROM LINEASFACTURAS LINFAC
         WHERE CF.INVOICE_ID=LINFAC.INVOICE_ID
         HAVING (SUM(LINFAC.AMOUNT)>300));
    Hay muchas más opciones... por ejemplo usando IN en lugar de EXISTS y suprimiendo el WHERE CF.INVOICE_ID=LINEAFAC.INVOICE_ID, o también asignando a la subconsulta un alias y en el WHERE de la primera consulta establecer la condición de que sea mayor que 300 y así lograrías suprimir el "having", y un largo etc...

    Deberás adaptar esta consulta a los tipos de datos que tengas, ya que por ejemplo, probablemente para el campo "INVOICE_DATE" tendrás el tipo fecha, si es así, pues como ya he dicho, depende del tipo del motor de base de datos, ya que las funciones de mysql para trabajar con fechas son distintas a las que puede utilizar por ejemplo Oracle o Access o cualquier otro...

    Esa consulta te devuelve el ID de cada factura que cumpla con las condiciones que pides.

    Un saludo y re-bienvenido .
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

  3. #3  
    Avanzado
    Fecha de ingreso
    Sep 2002
    Ubicación
    En mi chavola
    Mensajes
    194
    Descargas
    4
    Uploads
    0
    Muchas gracias por tu respuesta, que además de buena ha sido rápida.

    La solución es eficiente y muestra los números de factura para esa consulta.
    Pero ahora me viene el segundo problema y es que al añadir los campos del CIF y del importe me muestra muchos resultados. He estado probando con el group by y ni para atrás... ¡Que oxidado estoy!

    Por cierto es SQL estándar... pero esta orientado hacia oracle.

    Gracias de nuevo , a ver si conseguimos terminar de sacarlo.
    ---==Є£~CHΔCΔL==---

    ««--La curiosidad mató al gato, a mi me mostro las puertas--»»
    http://www.hacktheuniverse.tk
    Citar  
     

  4. #4  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    mmm, pero en el enunciado de la consulta no se habla nada del CIF:

    Hay que obtener las facturas realizadas a lo largo del 2011 con un importe de la factura (osea la suma de las lineas de la factura) mayores que 300 €.
    Ahí lo que se pide son "las facturas", si quieres además más información dime entonces el nuevo enunciado de la consulta cómo sería.

    Un saludo.
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

  5. #5  
    Avanzado
    Fecha de ingreso
    Sep 2002
    Ubicación
    En mi chavola
    Mensajes
    194
    Descargas
    4
    Uploads
    0
    Te lo pongo ta cual está;

    Realiza una consulta que obtenga aquellas facturas realizadas a lo largodel año 2011 con un importe de la factura(suma de sus líneas) mayor que 300 €.
    Los campos que debe devolver la consulta son los siguientes:

    Cif del proveedor Número de factura Importe de la factura

    Gracias de nuevo .
    ---==Є£~CHΔCΔL==---

    ««--La curiosidad mató al gato, a mi me mostro las puertas--»»
    http://www.hacktheuniverse.tk
    Citar  
     

  6. #6  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    uyuy, ese "Realiza" suena a "ejercicio de clase". ¿Qué quieres que te hagamos los deberes? . Bueno, te dejo que lo pienses, no es difícil, piensa que uno de los campos que tienes que devolver en el resultado ya lo tienes (el ID de la factura), y sólo te quedan los otros 2.

    Venga ánimo, si te ves apurado entonces pregunta, pero intenta resolverlo tú, que la parte "difícil" ya la tienes.

    Con respecto a resultados con campos repetidos, investiga sobre el "DISTINCT".

    Un saludo.
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

  7. #7  
    Avanzado
    Fecha de ingreso
    Sep 2002
    Ubicación
    En mi chavola
    Mensajes
    194
    Descargas
    4
    Uploads
    0
    Hola de nuevo;

    La solución era enlazar las tablas mediante las PK, haciendo además 2 inner join. El primero con 2 tablas que nos crearía otra virtual, y luego con esa creada y la otra haríamos lo mismo.

    Si alguien está interesado publico la solución (no la tengo aquí, asi que tendría que mirarlo).

    Por cierto LUK, era para una formación de cara una empresa (formaba parte de un proceso de selección).

    Gracias de nuevo por la ayuda.
    ---==Є£~CHΔCΔL==---

    ««--La curiosidad mató al gato, a mi me mostro las puertas--»»
    http://www.hacktheuniverse.tk
    Citar  
     

  8. #8  
    Moderador HH
    Fecha de ingreso
    Apr 2010
    Mensajes
    1.052
    Descargas
    7
    Uploads
    0
    Cita Iniciado por The_chacal Ver mensaje
    Hola de nuevo;

    La solución era enlazar las tablas mediante las PK, haciendo además 2 inner join. El primero con 2 tablas que nos crearía otra virtual, y luego con esa creada y la otra haríamos lo mismo.

    Si alguien está interesado publico la solución (no la tengo aquí, asi que tendría que mirarlo).

    Por cierto LUK, era para una formación de cara una empresa (formaba parte de un proceso de selección).

    Gracias de nuevo por la ayuda.
    A LUK lo dejas tranquilo que no ha intervenido
    • Taller de programación HackHispano: http://tallerdeprogramacion.es
    • Wargame HackHispano: [PRÓXIMAMENTE]
    • Normas del foro: http://foro.hackhispano.com/announcement.php?f=2
    Citar  
     

  9. #9  
    Avanzado
    Fecha de ingreso
    Sep 2002
    Ubicación
    En mi chavola
    Mensajes
    194
    Descargas
    4
    Uploads
    0
    o.O

    Madre mía... yo vi una respuesta de Luk... pero es evidente que no. Mi mente... me juega malas pasadas xD. Iba para hystd

    Saludos.
    ---==Є£~CHΔCΔL==---

    ««--La curiosidad mató al gato, a mi me mostro las puertas--»»
    http://www.hacktheuniverse.tk
    Citar  
     

  10. #10  
    Moderador HH
    Fecha de ingreso
    Apr 2010
    Mensajes
    1.052
    Descargas
    7
    Uploads
    0
    Cita Iniciado por The_chacal Ver mensaje
    o.O

    Madre mía... yo vi una respuesta de Luk... pero es evidente que no. Mi mente... me juega malas pasadas xD. Iba para hystd

    Saludos.
    Te comprendo, todos hemos tenido alguna vez confusión de niks xD
    • Taller de programación HackHispano: http://tallerdeprogramacion.es
    • Wargame HackHispano: [PRÓXIMAMENTE]
    • Normas del foro: http://foro.hackhispano.com/announcement.php?f=2
    Citar  
     

Marcadores

Marcadores