2011-08-03 65 views
0

假設我有一個表SomeTable數據如下:分解一個GROUP BY語句

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 

另一個表SomeTableGrouped以 「集團Byed」 版本使用這樣的查詢創建:

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 

如果我看的第一行,我需要能夠列出行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。但在這裏我們去...

如果你想找到的是總結了記錄的ID,只是涉及他們,因爲他們被創造:

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爲一張桌子。這可能是一個看法(看起來here to see how create views in DB2)。

通過這種方式,您可以確保數據始終保持最新狀態,而且您不必擔心後退跟蹤(「如果Num會得到更新?」)。