0

私は2つのテーブルを持っています

        1) T_SETTLEMENT_Transaction (master table)
        2) T_SETTLEMENT_Activity (child table)

T_SETTLEMENT_Transactionテーブルのデータ。

SettlemtTransactionID(pk) PC_TransactioID  Form_Of_PAyment  AgentName    CreatedeDateTime         PaymentTransaDate
1000                       1753014          CASH              Test1       2013-01-10 21:00:00.937  2013-01-10 21:00:00.937
1001                       1456325          Check             test2       2013-01-10 21:00:00.937  2013-01-10 21:00:00.937

T_SETTLEMENT_Activityテーブルのデータ。

SettlementActivity_ID(pk)   SettlementTransactionID(foreighKey) RoutingNumber  SettlementAmount   SettlemtDate             SettlementStatus SettlementType Bank_Account_NUM
 1                             1000                                1111111111     525            2013-01-10 21:00:00.937       PEND             STL       1234567890
 2                             1001                                1111111122     625             2013-01-10 21:00:00.937       PEND             STL       1234567891
 3                             1000                                1111111111     25             2013-01-13 21:10:00.937       PEND             FEE       1234567890

要件シナリオは次のとおりです。

1)

 Im selecting records based on "date" , "PEND" & "STL" status from 
 "settlementDate", "settlement_status" and "settlemnt_trans_type" columns.

2)

  If "STL" status record is having "FEE" record then i should add
  SettlementAmount of "FEE" record to "STL" record and only "STL" record should be retrieved.
  (we are checking "STL" is having "FEE" record or Not based on Settlement_TransactionId column (Pls refer the tables i mentioned above)). 

3)

 I would insert the "FEE" record for same Settlement_TransactionID 
 (eg.for Settlement_TransactionID=1000 )on same day of inserting "STL" record(if im having FEE record for that) or after 3 days(approx 3 or 5 days)  with different SETTLEMENT_DATE(which is in  
 selected column ).     

以下に示す(期待される出力)テーブルデータを参照してください。これは、必要な期待される出力を示しています。

以下のように2つのテーブルに参加します

 SELECT DISTINCT sum(xa.SETTLEMENT_AMOUNT) AMT,
                xa.ROUTING_NUMBER,
                xa.BANK_ACCOUNT_NUM,
                xa.SETTLEMENT_DATE   
                xa.SETTLEMENT_TRANSACTION_ID
                xt.PAYMENT_AGENT_NAME
                xt.PC_TRANSACTION_ID
                xt.CREATED_DATE_TIME,
                xt.PAYMENT_TRANS_DATE
                        FROM
    PCTransDB.dbo.T_SETTLEMENT_Transaction xt,
    PCTransDB.dbo.T_SETTLEMENT_Activity xa
    with (NOLOCK)
    where xa.SETTLEMENT_DATE <='2013-01-10 21:00:00.937'
     and xa.SETTLEMENT_STATUS='PEND'
     and xa.SETTLEMENT_TRANS_TYPE in('FEE','STL')
     and xt.SETTLEMENT_TRANSACTION_ID=xa.SETTLEMENT_TRANSACTION_ID 
            group by xa.SETTLEMENT_TRANSACTION_ID,
                     xa.ROUTING_NUMBER,
                     xa.BANK_ACCOUNT_NUM,
                     xa.SETTLEMENT_DATE  
                     xa.SETTLEMENT_TRANSACTION_ID 
                     xt.PAYMENT_AGENT_NAME
                     xt.PC_TRANSACTION_ID
                     xt.CREATED_DATE_TIME,
                     xt.PAYMENT_TRANS_DATE;

上記のクエリの現在の出力は次のとおりです。

 AMT    Routing Number    Bank_Account_Num  SETTLEMENT_DATE       SETTLEMENT_TRANSACTION_ID PAYMENT_AGENT_NAME  PC_TRANSACTION_ID  CREATED_DATE_TIME        PAYMENT_TRANS_DATE
525.00    111111111     1234567890          2013-01-01 20:00:00.0   1000                    TEST                171477             2012-06-25 00:00:00.0       2012-06-25 00:00:00.0
25.00      111111111    1234567890          2013-01-02 20:10:00.0   1000                    TEST                 171477            2012-06-  25 00:00:00.0  2012-06-25 00:00:00.0
625.00   111111122       1234567891         2013-01-01 20:00:00.0   1001                    TEST1               171478             2012-06-25 00:00:00.0    2012-12-25 21:00:00.0       

しかし、私の期待される出力は次のようになります

 AMT    Routing Number    Bank_Account_Num  SETTLEMENT_DATE       SETTLEMENT_TRANSACTION_ID PAYMENT_AGENT_NAME  PC_TRANSACTION_ID  CREATED_DATE_TIME        PAYMENT_TRANS_DATE
550.00    111111111     1234567890          2013-01-02 20:10:00.0   1000                    TEST                171477             2012-06-25 00:00:00.0       2012-06-25 00:00:00.0

625.00   111111122       1234567891         2013-01-01 20:00:00.0   1001                    TEST1               171478             2012-06-25 00:00:00.0    2012-12-25 21:00:00.0

期待される出力を得るためにクエリを間違えた場合、plsは私を修正します。

注:ここにテーブル列を貼り付けます:

T_SETTLEMENT_TRANSACTION

    SETTLEMENT_TRANSACTION_ID     NUMERIC(12,0)
    PC_TRANSACTION_ID             NUMERIC(12,0)
    PAYMENT_SOURCE_SYSTEM         VARCHAR(9)
    TRANSACTION_AMOUNT            NUMERIC(9,2)
    PAYMENT_AGENT_ID              VARCHAR(10)
    PAYMENT_AGENCY_ID             VARCHAR(10)
    USER_CLUB_CODE                VARCHAR(3)
    FORM_OF_PAYMENT               VARCHAR(4)
    PAYMENT_TRANS_DATE            DATETIME
    PAYMENT_USERREPO_AGENT_ID   VARCHAR(20)
    PAYMENT_AGENT_STATE           VARCHAR(10)
    PAYMENT_AGENT_NAME            VARCHAR(100)
    ACH_REJECT_COUNTER            BIGINT
    CREATED_BATCH_ID              VARCHAR(50)
    CREATED_DATE_TIME             DATETIME

2)T_SETTLEMENT_ACTIVITY

     SETTLEMENT_ACTIVITY_ID          NUMERIC(12,0)
     SETTLEMENT_TRANSACTION_ID       NUMERIC(12,0)
     ORDER_TRACE_NUMBER              VARCHAR(15)
     SETTLEMENT_STATUS               VARCHAR(10)
     SETTLEMENT_TRANS_TYPE           VARCHAR(10)
     SETTLEMENT_AMOUNT               NUMERIC(9,2)
     ROUTING_NUMBER                  VARCHAR(9)
     BANK_ACCOUNT_NUM                VARCHAR(20)
     SETTLEMENT_DATE                 DATETIME
     ACH_SUBMISSION_DATE_TIMESTAMP     DATETIME
     ACH_REJECT_CODE                 VARCHAR(10)
     ACH_TRACE_NUMBER                VARCHAR(15)
     ACH_RETURN_TRACE_NUMBER         VARCHAR(15)
     CREATED_BATCH_ID                VARCHAR(50)
     CREATED_DATE_TIME               DATETIME
     TRANS_XREF                      NUMERIC(12,0)
     NSF_XREF                        NUMERIC(12,0)
     MODIFIED_BY                     VARCHAR(50)
     LAST_MODIFIED_DATE_TIME         DATETIME
     SETTLEMENT_CANCEL_REASONCODE     VARCHAR(10)
4

1 に答える 1

0

このクエリは、目的の出力を生成するようです。ただし、投稿したクエリは実行できない可能性があり、サンプルデータは機能しない可能性があります。列「BANK_ACCOUNT_NUM」はサンプルデータに関連付けられておらず、GROUP BY句に含まれているため、気が遠くなる可能性があります。

SELECT DISTINCT sum(xa.SETTLEMENT_AMOUNT) AMT,
                xa.ROUTING_NUMBER,
                xa.BANK_ACCOUNT_NUM,
                xa.SETTLEMENT_DATE,
                xa.SETTLEMENT_TRANSACTION_ID,
                xt.PAYMENT_AGENT_NAME,
                xt.PC_TRANSACTION_ID,
                xt.CREATED_DATE_TIME,
                xt.PAYMENT_TRANS_DATE
FROM
    T_SETTLEMENT_Transaction xt,
    T_SETTLEMENT_Activity xa
where xa.SETTLEMENT_DATE <='2013-01-10 21:00:00.937'
  and xa.SETTLEMENT_STATUS='PEND'
  and xa.SETTLEMENT_TRANS_TYPE in('FEE','STL')
  and xt.SETTLEMENT_TRANSACTION_ID=xa.SETTLEMENT_TRANSACTION_ID 
group by xa.SETTLEMENT_TRANSACTION_ID,
         xa.ROUTING_NUMBER,
         xa.BANK_ACCOUNT_NUM,
         xa.SETTLEMENT_DATE,
         xa.SETTLEMENT_TRANSACTION_ID, 
         xt.PAYMENT_AGENT_NAME,
         xt.PC_TRANSACTION_ID,
         xt.CREATED_DATE_TIME,
         xt.PAYMENT_TRANS_DATE;

SQLの問題を解決する際には、このようなものに単純化すると役立つことがよくあります。

SELECT DISTINCT 
    sum(xa.SETTLEMENT_AMOUNT) AMT,
    xa.SETTLEMENT_TRANSACTION_ID
FROM
    T_SETTLEMENT_Transaction xt,
    T_SETTLEMENT_Activity xa
where xt.SETTLEMENT_TRANSACTION_ID=xa.SETTLEMENT_TRANSACTION_ID 
group by xa.SETTLEMENT_TRANSACTION_ID;

それが機能する場合は、さらに列とWHERE条件を追加できます。

将来的には、作業中のDDLおよびSQLINSERTステートメントを投稿します。これにより、ここの人々はコードを貼り付けて実行することができます。すべての列の名前の誤り、データの切り捨て、誤解を招くデータを把握しようとするよりもはるかに高速です。

于 2013-01-05T16:06:57.170 に答える