これが簡単なものであることを願っています:
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 が返されます。
これで十分ですか?
再度、感謝します
クレイグ