0

我有两个表查询(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 的类型。我想做的是用非规范化结果集表示两个 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

有什么想法吗?

谢谢 C

4

1 回答 1

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
于 2013-08-22T16:37:24.923 回答