假设我有一个表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
使用如下查询创建的另一个表SomeTableGrouped
,其中包含“Group 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
如果我查看第一行,我需要能够列出SomeTable
我该怎么做?我不能非常改变模式(即我只能添加新列,删除列,添加新表)所以一个肮脏的解决方案对我来说完全没问题。
答案 0 :(得分: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 = ...
答案 1 :(得分: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
更新会怎样?”)。