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
得到更新怎么办?”)