【发布时间】:2012-12-29 11:17:19
【问题描述】:
我有一个阶段表“STAGE_TABLE”,其中包括以下值(列是 varchar2,id 除外)-
+-------------------------------------------------------------------------------------------------------------------------
¦ STAGE_ID ¦ EMP_ID ¦ ATTR1_OLD_VAL ¦ ATTR1_NEW_VAL ¦ ATTR2_OLD_VAL ¦ ATTR2_NEW_VAL ¦ ATTR3_OLD_VAL ¦ ATTR3_NEW_VAL ¦
¦-----------+------------+---------------+---------------+---------------+---------------+---------------+---------------¦
¦ 1 ¦ E001 ¦ xyz ¦ pqr ¦ mmm ¦ nnn ¦ zzz ¦ aaa ¦
¦ 2 ¦ E001 ¦ ¦ ¦ ¦ ¦ ¦ ¦
¦ 3 ¦ E001 ¦ pqr ¦ abc ¦ xxx ¦ yyy ¦ ¦ ¦
¦ 4 ¦ E002 ¦ aaa ¦ ccc ¦ bbb ¦ ttt ¦ ¦ ¦
¦ 5 ¦ E002 ¦ ¦ ¦ ¦ ¦ fff ¦ ppp ¦
¦ 6 ¦ E002 ¦ ¦ ¦ kkk ¦ jjj ¦ ¦ ¦
+-------------------------------------------------------------------------------------------------------------------------
我想将上表中属于同一员工的多行合并为一个-
+-------------------------------------------------------------------------------------------------------------
¦ EMP_ID ¦ ATTR1_OLD_VAL ¦ ATTR1_NEW_VAL ¦ ATTR2_OLD_VAL ¦ ATTR2_NEW_VAL ¦ ATTR3_OLD_VAL ¦ ATTR3_NEW_VAL ¦
¦------------+---------------+---------------+---------------+---------------+---------------+---------------¦
¦ E001 ¦ pqr ¦ abc ¦ xxx ¦ yyy ¦ zzz ¦ aaa ¦
¦ E002 ¦ aaa ¦ ccc ¦ kkk ¦ jjj ¦ fff ¦ ppp ¦
+-------------------------------------------------------------------------------------------------------------
我开始了解 MERGE 语句,但不确定它是否会起作用。 我是 oracle pl/sql 的新手。
【问题讨论】:
-
“合并”是什么意思?根据给定的数据,您的结果是什么?
-
因为我将多列中的数据合并到单行中。
-
要理解您的问题:为什么 ATTR1_OLD_VAL = pqr 而不是 xyz?因为 STAGE_ID=3 > STAGE_ID=1 ?
-
是的...考虑阶段表是一个日志表。 stage id 表示唯一的日志 id。如果值为空,则表示现在对给定属性进行了更改。
标签: sql oracle plsql oracle11g plsqldeveloper