1

SQL Server 2014 を使用しています。顧客と場所によって分割またはグループ化された日付範囲の合計 (合計) を集計する必要があります。重要なのは、すべての調整額を取得し、それらが請求トランザクション日に適用されるときにそれらを合計することです。

そのため、最後の請求日より後のすべての調整は、次の請求日よりも前に合計され、請求金額とともに適切に提示される必要があります。

例を参照してください:

+------------------+------------+------------+------------------+--------------------+
| TRANSACTION_TYPE | CUSTOMERID | LOCATIONID | TRANSACTION DATE | TRANSACTION AMOUNT |
+------------------+------------+------------+------------------+--------------------+
| bill             | 215        | 102        | 7/7/2016         | $100.00            |
| bill             | 215        | 102        | 6/6/2016         | $121.00            |
| adj              | 215        | 102        | 6/1/2016         | $22.00             |
| adj              | 215        | 102        | 5/8/2016         | $0.35              |
| adj              | 215        | 102        | 5/7/2016         | $5.00              |
| bill             | 215        | 102        | 5/6/2016         | $115.00            |
| bill             | 215        | 102        | 4/7/2016         | $200.00            |
| adj              | 215        | 102        | 4/2/2016         | $4.35              |
| adj              | 215        | 102        | 4/1/2016         | $(0.50)            |
| adj              | 215        | 102        | 3/28/2016        | $33.00             |
| bill             | 215        | 102        | 3/28/2016        | $75.00             |
| adj              | 215        | 102        | 3/5/2016         | $0.33              |
| bill             | 215        | 102        | 3/3/2016         | $99.00             |
+------------------+------------+------------+------------------+--------------------+

私が見たいのは次のとおりです。

    +------------------+------------+------------+------------------+-------------+-------------------+
| TRANSACTION_TYPE | CUSTOMERID | LOCATIONID | TRANSACTION DATE | BILL AMOUNT | ADJUSTMENT AMOUNT |
+------------------+------------+------------+------------------+-------------+-------------------+
| bill             | 215        | 102        | 7/7/2016         | $100.00     | $-                |
| bill             | 215        | 102        | 6/6/2016         | $121.00     | $27.35            |
| bill             | 215        | 102        | 5/6/2016         | $115.00     | $-                |
| bill             | 215        | 102        | 4/7/2016         | $200.00     | $36.85            |
| bill             | 215        | 102        | 3/28/2016        | $75.00      | $0.33             |
| bill             | 215        | 102        | 3/3/2016         | $99.00      | $-                |
+------------------+------------+------------+------------------+-------------+-------------------+
4

2 に答える 2

0

必要がある:

  • 最初に、テーブルを TransactionType の 2 つの (仮想) サブテーブルとして考えます。
  • 次に、LEAD 関数を使用して、適用する調整の日付範囲を取得します。と
  • 最後に eft 結合を実行します。

以下の未テストの SQL:

with
BillData as (
    select
        TransactionType,
        CustomerID,
        LocationID,
        TransactionDate,
        TransactionAmount,
        lead(TransactionDate, 1) over (partition by CustomerID 
                                       order by TransactionDate) as NextDate
    from @data bill
    where TransactionType = 'bill'
),
AdjData as (
    select
        CustomerID,
        TransactionDate,
        sum(TransactionAmount) as AdjAmount
    from @data adj
    where TransactionType = 'adj'
)
select
    bill.TransactionType,
    bill.CustomerID,
    bill.LocationID,
    bill.TransactionDate,
    sum(TransactionAmount)  as BillAmount,
    sum(AdjAmount)          as AdjAmount
from BillData bill
left join AdjData adj
    on adj.CustomerID = bill.CustomerID
   and bill.TransactionDate <= adj.TransactionDate
   and adj.TransactionDate < bill.NextDate
group by
    bill.TransactionType,
    bill.CustomerID,
    bill.LocationID,
    bill.TransactionDate
;
于 2016-07-30T13:02:47.910 に答える