2011-08-03 8 views
0

、GROUP BYを分解する、私は次のようなデータを持つテーブルSomeTableを持っていると仮定すると:は声明

Primary Key Column1 Column2 Column3 Column4 Column5 Num 
    1   dat1  abc1  dat3  dat4  por7  1 
    2   dat1  gcd4  dat3  dat4  yrt8  6 
    3   dat1  iut7  dat3  dat4  asd6  2 
    4   other1  other2  other3  other4  other5  4 

別の表の "グループByed" バージョンとSomeTableGroupedは、このようなクエリを使用して作成:

INSERT INTO SomeTableGrouped 
SELECT Column1, Column3, Column4, SUM(Num) 
FROM SomeTable 
GROUP BY Column1, Column3, Column4 

Primary Key Column1 Column3 Column4 Num 
    100   dat1  dat3  dat4  9 
    200  other1  other3  other4  4 

私はSomeTableGroupedのプライマリキーを持っていれば、それが来たSomeTableから特定の行を伝えることができる必要があります。

例:別のテーブルRandomTable

、私はこのようなデータを持っている:

Primary Key Column1 SomeTableGroupedId 
    1   dat1    100 
    2   dat2    100 

Iは最初の行を見れば、私は1行アウトリストできるようにする必要が - から3 SomeTable

どうすればいいですか?私はスキーマを非常に変更することはできません(つまり、新しい列の追加、列の削除、新しい表の追加ができます)。

答えて

1

私はこれがあなたの望むものだと思います。

SELECT id 
FROM SomeTable 
INNER JOIN SomeTableGrouped ON 
    (SomeTable.Column1 = SomeTableGrouped.Column1) AND 
    (SomeTable.Column2 = SomeTableGrouped.Column2) AND 
    (SomeTable.Column3 = SomeTableGrouped.Column3) 
WHERE SomeTableGrouped.id = ... 
0

あなたも、あなただけSomeTableを必要とする、すべてのそれらのテーブルを作成する必要はありません。

select st.PrimaryKey as STPK, stg.PrimaryKey as STGPK 
from SomeTable st 
inner join SomeTableGrouped stg 
on (st.Column1 = stg.Column1 and 
    st.Column3 = stg.Column3 and 
    st.Column5 = stg.Column5) 

しかし、あなたもSomeTableGroupedなどを作成しているべきではありません。しかし、ここで我々はあなたがまとめたレコードのIDを検索したい場合は、作成されたとして、ちょうどそれらを関連付ける

...行きますテーブル。これは、ビュー(here to see how create views in DB2)を表示することができます。

そのようにすれば、データは常に最新のものであり、バックトラッキング(「Numが更新されたらどうなるでしょうか?)」を心配する必要はありません。