es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Usando EXISTS en una consulta SQL

Solo quiero mostrar las órdenes que deben ser facturadas. En la imagen de abajo, mostré dos órdenes. Solo quiero mostrar el número de oferta 2200, porque hay un monto (5000) que debe ser facturado. En ambas ofertas, hay una fila con el tipo de término 6. Esto debe ser ignorado.

Usé la siguiente consulta:

Seleccionar
    salesorder.offerno,
    salesorderterm.termtype,
    salesorderterm.invoiceamount,
    salesorderterm.salesinvoice
Desde 
    salesorder
Izquierda Unirse 
    salesorderterm en (salesorder.objectid = salesorderterm.salesorder)
donde 
    existe (seleccionar 1 from salesorderterm where salesinvoice = 0)
    y salesstatus = 1

Sin embargo, la salida muestra ambas órdenes. Esto podría deberse a la fila con el tipo de término 6 e invoiceamount = 0.

¿Cómo puedo solucionarlo?

Adjunto: Ejemplo de datos aquí

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para mostrar solo los pedidos que necesitan ser facturados y excluir aquellos con el tipo de término 6 y un monto de factura = 0, podemos modificar la consulta existente para agregar condiciones adicionales en la cláusula WHERE. Aquí está la consulta actualizada:

    SELECT 
        salesorder.offerno,
        salesorderterm.termtype,
        salesorderterm.invoiceamount,
        salesorderterm.salesinvoice
    FROM 
        salesorder
    LEFT JOIN 
        salesorderterm ON (salesorder.objectid = salesorderterm.salesorder)
    WHERE 
        salesorder.salesstatus = 1
        AND salesorderterm.salesinvoice = 0
        AND salesorderterm.termtype NOT IN (6, 7)
        AND salesorderterm.invoiceamount > 0;
    

    Explicación:

    • La condición salesorder.salesstatus = 1 filtra los pedidos inactivos o cancelados.
    • La condición salesorderterm.salesinvoice = 0 asegura que solo se muestren los pedidos que necesitan ser facturados.
    • La condición salesorderterm.termtype NOT IN (6, 7) excluye las filas con el tipo de término 6 (anulaciones/correcciones) y 7 (cancelaciones).
    • La condición salesorderterm.invoiceamount > 0 filtra todas las filas con montos de factura iguales a cero.

    Al combinar todas estas condiciones, podemos generar un conjunto de resultados que muestra únicamente los pedidos listos para ser facturados.

Comments are closed.