【发布时间】:2014-10-06 16:14:22
【问题描述】:
使用 Oracle 11g DB,我正在寻找一种方法来将一个表中的两行合并到我的查询结果中的一行中,但也允许在未输入数据的情况下使用 NULL 值。
基本上我有类似的东西:
TABLE1 包含对象标识
TABLE2 包含两行对象数据(类型 A 和 B)
我在想我需要运行一个 OUTER JOIN,它仅在获取对象数据类型 A 时有效,但是当我添加第二个 JOIN 时,我会为 B 的每一行得到多个重复的 A 行。
所以如果有 4 个 A 值和 5 个 B 值,我会看到每行 B 有 5 行 A(总共 20 行)
SELECT T1.NAME, T2a.VALUE as TYPE_A, T2b.VALUE as TYPE_B
FROM TABLE1 T1
LEFT OUTER JOIN TABLE2 T2a ON (T1.ID = T2a.ID AND T2a.TYPE='A')
LEFT OUTER JOIN TABLE2 T2b ON (T1.ID = T2b.ID AND T2b.TYPE='B')
我想要得到这个(看看 A 有 6 个条目,B 有 5 个条目):
NAME TYPE_A TYPE_B
ID1 VALUE1 VALUE2
ID1 VALUE1 VALUE2
ID1 VALUE1 (NULL)
ID1 VALUE1 VALUE2
ID1 (NULL) VALUE2
ID1 VALUE1 (NULL)
ID1 (NULL) VALUE2
ID1 VALUE1 (NULL)
任何帮助将不胜感激。
KS
【问题讨论】:
-
您的查询中没有其他联接吗?您确定
ID在各自的表中是唯一的吗? -
在我看来,您只想将数据转为类型...
-
ID1 在本例中相同,但 TYPE_A 和 TYPE_B 的数据不同。基本上我们有一个产品可以有两种类型的测试。测试在单独的行(A 和 B)上,我需要将它们“合并”成一行:产品、testA、testB。 LEFT JOIN 让我得到数据,但我得到重复的行,所以如果有 5 个 testA 和 6 个 testB,我似乎得到 30 行(每个 testB 一个 testA 行)
标签: sql oracle outer-join