DeNormalize一个表

时间:2013-08-22 16:26:53

标签: sql oracle

我有两个表查询(Oracle),我们称之为A和B.

A

ID    SEQ
----  ----
1234  1
1235  3

B
ID    TYPE   SEQ  NUM
----  ----   ---  ---
1234  ORDER  1    10
1234  MODIFY 1    10
1235  ORDER  1    10
1235  MODIFY 1    10
1235  ORDER  2    11
1235  MODIFY 2    21
1235  ORDER  3    16

因此,表A包含一个唯一的行,其上有一个SEQ号,每当表B上的某些内容发生变化时它就会递增(表B列出了历史表)。因此,在ID 1234的情况下,自写入行以来没有任何变化,因此SEQ为1,表B中的两行的SEQ都为1。

然而,ID 1235自首次编写以来有三处变化。但在第三次更改中,只更改了ORDER的TYPE。我想要做的是用非规范化结果集表示两个ID。像枢轴一样。

所以,如果我要做类似的事情;

SELECT
A.ID
, MIN (CASE WHEN B.TYPE = 'ORDER'  THEN NUM END) AS V_ORDER
, MIN (CASE WHEN B.TYPE = 'MODIFY'  THEN NUM END) AS V_MODIFY
FROM A
, LEFT JOIN B ON B.ID = A.ID
AND B.SEQ = A.SEQ
GROUP BY A.ID

我只得到SEQ匹配的结果。

ID    V_ORDER  V_MODIFY
----  -------  -------
1234  10       10
1235  16       NULL

我真正想要的是查看最大SEQ值的结果;

ID    V_ORDER  V_MODIFY
----  -------  -------
1234  10       10
1235  16       21

有什么想法吗?

由于 ç

1 个答案:

答案 0 :(得分:1)

加入选择最大值的派生表。这是一个通用的例子。

select fred, barney, pebbles, wilma
from flinstones join
(select fred, max(wilma) maxwilma
from flinstones
were whatever
group by fred) bedrock using (fred)
where whatever
and wilma = maxwilma
相关问题