-1

これが簡単なものであることを願っています:

2 つのシステム間で値を比較するために、ACCOUNT と MONTH が同じであるすべての値の合計を含む単一の行を生成する必要があります。

ただし、単純に値を選択すると正しい量が得られますが、値に SUM() を適用すると倍増します。

テーブル構造:

ACCOUNT    MONTH    PC     VALUE
12110      201305   B1000  100
12110      201305   B1000  50

正しい値は次のように返されます。

select 
    t1.[ACCOUNT] as [ACCOUNT],
    t1.[MONTH] as [MONTH],
    t1.[PC] as [PC],
    t2.[VALUE] as [VALUE]

from Table1 t1
inner join Table2 t2
on t1.ACCOUNT = t2.ACCOUNT
and t1.MONTH = t2.MONTH
and t1.[PC] = t2.[PC]

group by t1.ACCOUNT, t1.MONTH, t1.PC, t2.VALUE

これは以下を返します:

ACCOUNT    MONTH    PC     VALUE
12110      201305   B1000  150

ただし、ロールアップを適用すると:

select 
    t1.[ACCOUNT] as [ACCOUNT],
    t1.[MONTH] as [MONTH],
    t1.[PC] as [PC],
    sum(t2.[VALUE]) as [VALUE]

from Table1 t1
inner join Table2 t2
on t1.ACCOUNT = t2.ACCOUNT
and t1.MONTH = t2.MONTH
and t1.[PC] = t2.[PC]

group by t1.ACCOUNT, t1.MONTH, t1.PC

これは以下を返します:

ACCOUNT    MONTH    VALUE
12110      201305   300

私はこれを1時間以上見つめていて、マイナーな問題であるべきことについて頭を曲げることができないので、誰か助けてもらえますか?

ありがとう。

クレイグ

* 編集 *

OK、完全なテーブル構造:

CATEGORY    DATASRC    CURRENCY    MONTH    VALUE                ACCOUNT    PC      FLOW
WF          PP         LC          201305   2588651.6800000000   12110      B1090   MV
WF          PP         LC          201305   -1288651.6800000000  12110      B1090   MV
WF          PP         LC          201306   1000000.0000000000   12110      B1090   MV
WF          PP         LC          201305   -500000.0000000000   12110      B1500   MV

上記の例では、必要なジャンクションの 2 つの値 (上の 2 つ) が表示されます。他の行には、別の MONTH (行 3) または別の PC があります。

私がやっていることは、ACCOUNT、PC、および MONTH が同じ (上記の 1 行目と 2 行目) の値を合計することです。他の列 (バーの値) は常に同じです。

これらの行の合計は 1,300,000.00 になるはずです。

それらを合計すると (最初の例に示すように)、2,600,000.00 が返されます。

これで十分ですか?

再度、感謝します

クレイグ

4

1 に答える 1