Pregunta

El siguiente código SQL crea una tabla de dos líneas con una factura en una sola línea y el pago agrupados en la otra línea. Sin embargo eso no es la representación deseada. El verdadero objetivo es mostrar como la declaración, cuando la factura es en la parte superior, seguido de una lista de los pagos por fecha.

¿Es posible escribir una consulta para lograr que, basándose en la información que se muestra? (No dude en solicitar más información). ¿Puede alguien sugerir un enfoque?

Este es el código SQL SELECT:

SELECT     FilteredInvoice.accountidname,
           FilteredInvoice.createdon,
           FilteredInvoice.duedate,
           FilteredInvoice.invoicenumber,               
           FilteredInvoice.statecodename,
           FilteredInvoice.totalamount_base,
           FilteredMag_Payment.mag_paymentdate,
           FilteredMag_Payment.mag_amount_base,
           GETDATE() AS Today

FROM            FilteredInvoice
LEFT OUTER JOIN FilteredAccount ON FilteredInvoice.accountid = FilteredAccount.accountid
LEFT OUTER JOIN FilteredMag_Payment ON FilteredInvoice.invoiceid = FilteredMag_Payment.mag_invoiceid

WHERE     (FilteredInvoice.statecodename <> N'Canceled')
ORDER BY FilteredInvoice.createdon
¿Fue útil?

Solución

Hay algunas rarezas sobre la consulta original - es el nombre de cuenta ID realmente llevó a cabo en la mesa de la factura, en lugar de la tabla de cuentas? La combinación externa izquierda de la factura a la cuenta también hace que parezca que no puede haber facturas sin Cuentas correspondiente - que sería más normal suponer lo contrario, especialmente en un informe comunicado

.

Si se asume la consulta original es seleccionar los datos requeridos correctamente, sugiero:

SELECT    FilteredInvoice.accountidname, 
    FilteredInvoice.createdon,
    FilteredInvoice.createdon AS sort_date,
    FilteredInvoice.duedate,
    FilteredInvoice.invoicenumber,
    FilteredInvoice.statecodename, 
    FilteredInvoice.totalamount_base,
    CONVERT(datetime,NULL) AS mag_paymentdate,
    0 AS mag_amount_base,
    GETDATE() AS Today
FROM    FilteredInvoice 
LEFT OUTER JOIN    FilteredAccount ON FilteredInvoice.accountid = FilteredAccount.accountid 
WHERE    (FilteredInvoice.statecodename <> 'Canceled')
UNION ALL
SELECT    FilteredInvoice.accountidname, 
    FilteredInvoice.createdon,
    FilteredInvoice.createdon AS sort_date,
    FilteredInvoice.duedate,
    FilteredInvoice.invoicenumber,
    FilteredInvoice.statecodename, 
    FilteredInvoice.totalamount_base,
    FilteredMag_Payment.mag_paymentdate,
    FilteredMag_Payment.mag_amount_base,
    GETDATE() AS Today
FROM    FilteredInvoice 
LEFT OUTER JOIN    FilteredAccount ON FilteredInvoice.accountid = FilteredAccount.accountid 
JOIN    FilteredMag_Payment ON FilteredInvoice.invoiceid = FilteredMag_Payment.mag_invoiceid
WHERE    (FilteredInvoice.statecodename <> 'Canceled')
ORDER BY 3

Otros consejos

Me parece que la información de pago debe estar en la misma fila que la factura. La única manera de obtener una segunda fila es si usted tiene dos pagos. Puesto que usted está ordenando la fecha de factura, ambas filas tendrán la misma fecha y tipo uno junto al otro.

Mi conjetura, de lo que ha dicho, es que se desea ordenar Fecha de la factura si no hay un pago y la fecha de pago si es que existe. Proveedores:

Order by Coalesce(FilteredMag_Payment.mag_paymentdate, FilteredInvoice.createdon)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top