2016-03-31 7 views
0

したがって、私は現在、請求時と支払い時に基づいてフィルタリングしようとしているレコードのリストを持っています 顧客は、月顧客が1カ月間に請求され、別の場所で支払われた場所に基づいてレコードをフィルタリングする

これまでの私のクエリまで請求されたと、彼らは自分の予定を持っていたし、2月に請求された。すなわち、来月まで払っていなかったが、didntの給与:

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

クエリの3つのテーブルからいくつかのサンプルデータを投稿できますか? –

答えて

1

以下があることを想定して私のために働きました請求書と支払いはテーブルの2つの別々の行です。

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)) 
関連する問題