2016-03-31 17 views
0

So habe ich derzeit eine Liste von Datensätzen, die ich filtrieren basierend auf wenn sie berechnet wurden und wenn sie für den Termin bezahlt Ich möchte nur Datensätze, wo der Kunde wurde in Rechnung gestellt und hat bis zum nächsten Monat nicht bezahlen, dh sie ihren Termin hatten und im Februar aber nur knapp sein Ziel Bezahlung bis MärzFiltern Datensätze nach, wo Kunden einen Monat in Rechnung gestellt und in einem anderen

Meine Anfrage bisher in Rechnung gestellt:

SELECT TRANS.WHENTRANS ACDATE, 
    TRANS.AMTUNRES UNPAID, 
    TRANS.TRANTYPE, 
    TRANS.INCPROVCODE IPROV, 
    ACHOLDERACH.ACBALANCE BALANCE, 
    ACHOLDERANY.PREFORMATTEDINTERN ACCOUNTNAMECHART, 
    Amount 
FROM ( TRANS 
    LEFT JOIN ACHOLDER ACHOLDERACH ON ACHOLDERACH.ACHOLDERID = TRANS.ACHOLDERID) 
    LEFT JOIN ANYBODY ACHOLDERANY ON ACHOLDERANY.ANYBODYID = TRANS.ACHOLDERID 



where TranType = 'I' and amount = x 
and TranType = 'P' and amount = -x and date = current month 
+0

Konnten Sie einige Beispieldaten aus den drei Tabellen in Ihrer Abfrage posten? –

Antwort

1

der gearbeitet folgende für mich unter der Annahme, dass Die Rechnung und Zahlung sind zwei separate Zeilen in der Tabelle.

CREATE TABLE #TEST (ACDATE DATE, UNPAID VARCHAR(1), TRANTYPE VARCHAR(1), IPROV VARCHAR(5), ACBALANCE FLOAT, ACCOUNTNAMECHART VARCHAR(100), AMOUNT FLOAT) 
INSERT INTO #TEST 
(ACDATE, UNPAID, TRANTYPE, IPROV, ACBALANCE, ACCOUNTNAMECHART, AMOUNT) 
VALUES 
('8/1/2016', 'Y', 'I', '003', 0, 'TESTNAME', 150.50), 
('9/1/2016', 'N', 'P', '003', 0, 'TESTNAME',150.50) 
SELECT A.ACDATE AS INVOICEDATE, A.AMOUNT AS INVOICEAMT, B.ACDATE AS PAYMENTDATE, B.AMOUNT AS PAYMENTAMT 
FROM 
(
    SELECT * 
    FROM #TEST 
    WHERE TRANTYPE = 'I' 
) A 
LEFT JOIN 
(
    SELECT * 
    FROM #TEST 
    WHERE TRANTYPE = 'P' 
) B ON A.ACCOUNTNAMECHART = B.ACCOUNTNAMECHART -- OR YOU CAN USE WHATEVER KEY FIELDS YOU HAVE TO HOOK TH INVOICE TO THE PAYMENT 
WHERE MONTH(A.ACDATE) = MONTH(DATEADD(MM,-1,B.ACDATE))