Sql 按语句分解组

Sql 按语句分解组,sql,db2,Sql,Db2,假设我有一个包含以下数据的表SomeTable: Primary Key Column1 Column2 Column3 Column4 Column5 Num 1 dat1 abc1 dat3 dat4 por7 1 2 dat1 gcd4 dat3 dat4 yrt8 6 3

假设我有一个包含以下数据的表
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 
Primary Key    Column1    SomeTableGroupedId
    1           dat1             100
    2           dat2             100
我希望能够做到的是,如果我有一个主键
SomeTableGrouped
,我需要能够分辨它来自
SomeTable
的哪些特定行

例如:

在一个单独的表中,我有如下数据:

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 
Primary Key    Column1    SomeTableGroupedId
    1           dat1             100
    2           dat2             100
如果我看第一行,我需要能够从
SomeTable


我该怎么做?我不能太多地更改模式(即,我只能添加新列、删除列、添加新表),所以脏的解决方案对我来说是完全合适的。

我想这就是您想要的

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 = ...

您甚至不需要创建所有这些表,只需要
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
创建为一个表。它可能是一个视图(外观)

这样,您就可以确保数据始终是最新的,并且不必担心回溯(“如果
Num
得到更新怎么办?”)