Sql 来自同一表的Oracle多重联接查询正在显示重复的值

Sql 来自同一表的Oracle多重联接查询正在显示重复的值,sql,oracle,outer-join,Sql,Oracle,Outer Join,使用Oracle11gdb,我正在寻找一种方法,可以将一个表中的两行合并到查询结果的一行中,但也可以在未输入数据的地方允许空值 基本上我有这样的想法: 表1包含对象标识 表2包含两行对象数据类型A和B 我在想我需要运行一个外部连接,它在只获取对象数据类型A时有效,但是当我添加第二个连接时,每一行B都会得到多个重复的A行 因此,如果有4个A值和5个B值,我将看到5行A,每行B总共20行 SELECT T1.NAME, T2a.VALUE as TYPE_A, T2b.VALUE as TYPE_B

使用Oracle11gdb,我正在寻找一种方法,可以将一个表中的两行合并到查询结果的一行中,但也可以在未输入数据的地方允许空值

基本上我有这样的想法:

表1包含对象标识

表2包含两行对象数据类型A和B

我在想我需要运行一个外部连接,它在只获取对象数据类型A时有效,但是当我添加第二个连接时,每一行B都会得到多个重复的A行

因此,如果有4个A值和5个B值,我将看到5行A,每行B总共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

一个支点会起作用吗

注意:只有知道所需类型的所有值时,Pivot才起作用。如果不知道,则必须使用动态SQL

SELECT *
FROM  
(
  SELECT Name, Type, Value
  FROM   Table1 T1
  INNER JOIN table2 T2 
    ON T1.ID = T2.ID
)
PIVOT 
(
  MAX(Value)
  FOR (Type) IN ('A' AS TYPE_A,
                 'B' AS Type_B)
);
枢轴应该在这里工作

SQL Fiddle:


在你的查询中没有其他的连接吗?您确定ID在各自的表中是唯一的吗?在我看来,您只是想透视类型上的数据……在本例中,ID1是相同的,类型A和类型B的数据是不同的。基本上,我们有一个产品,可以有两种类型的测试。测试在单独的A行和B行上,我需要将它们“合并”到一行中:product、testA、testB。LEFT JOIN为我获取数据,但我得到重复的行,因此如果有5个testA和6个testB,我似乎得到了30行,每个testB可以有一个testA行,其中name='XYZ'?我不明白为什么不这样做。这可能发生在两个不同的地方,这取决于我们希望在哪里施加限制。在数据透视之前或之后。if before只需在on子句后添加where。如果在后面,则在last之后和before;之前添加where子句;。
SELECT * 
FROM (SELECT T1.ID, T2.type, T2.value
FROM table1 T1
JOIN table2 T2
ON T1.ID = T2.ID) 
PIVOT
( MAX(value) FOR type in ('A', 'B')
)