Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 统一同一记录中具有不同列的查询_Sql_Performance_Oracle - Fatal编程技术网

Sql 统一同一记录中具有不同列的查询

Sql 统一同一记录中具有不同列的查询,sql,performance,oracle,Sql,Performance,Oracle,这是我的问题: 我有几个查询,每个查询检索两列 例如: 1.客户-大喜 2.客户-Patr 3.客户-运动 。 . . -客户-轮胎 始终使用不同的列检索客户端 如果我创建一个并集,查询的结果如下:(当然,许多行具有相同的客户机,但列的值不同) 我希望像这样统一查询和检索(每个客户机一列,统一一条记录中的不同列): 一些想法?你想做一个完整的外部连接。以下是四个查询的示例: select coalesce(q1.client, q2.client, q3.client, q4.client)

这是我的问题:

我有几个查询,每个查询检索两列

例如:

1.客户-大喜

2.客户-Patr

3.客户-运动

。 . .

-客户-轮胎

始终使用不同的列检索客户端

如果我创建一个并集,查询的结果如下:(当然,许多行具有相同的客户机,但列的值不同)

我希望像这样统一查询和检索(每个客户机一列,统一一条记录中的不同列):


一些想法?

你想做一个完整的外部连接。以下是四个查询的示例:

select coalesce(q1.client, q2.client, q3.client, q4.client) as client,
       q1.Dahi, q2.Patr, q3.Orts, q4.Tyre
from q1 full outer join
     q2
     on q2.client = q1.client full outer join
     q3
     on q3.client = coalesce(q1.client, q2.client) full outer join
     q4
     on q4.client = coalesce(q1.client, q2.client, q3.client);
full outer join
的一个问题是,对于上一个表/子查询,
client
列可能是
NULL
。这就是为什么连接条件需要
coalesce()

如果你有一个客户端列表,这个查询可以简化一点。或者,如果为所有子查询计算一个。以下是一个例子:

select coalesce(q1.client, q2.client, q3.client, q4.client) as client,
       q1.Dahi, q2.Patr, q3.Orts, q4.Tyre
from (select client from q1 union
      select client from q2 union 
      select client from q3 union
      select client from q4
     ) driver left outer join
     q1
     on q1.client = driver.client left outer join
     q2
     on q2.client = driver.client left outer join
     q3
     on q3.client = driver.client left outer join
     q4
     on q4.client = driver.client;

子查询获取所有客户机的列表(如果在单独的表中则更好)。后续的
左外部联接
s一次引入一个表。

假设您正在使用pivot构建结果集,您可能只需要使用聚合函数max和group by The client id为每个客户端获取一行。如果这不起作用,那么在获得结果集之后,可以使用max和group by client进行聚合。
select coalesce(q1.client, q2.client, q3.client, q4.client) as client,
       q1.Dahi, q2.Patr, q3.Orts, q4.Tyre
from q1 full outer join
     q2
     on q2.client = q1.client full outer join
     q3
     on q3.client = coalesce(q1.client, q2.client) full outer join
     q4
     on q4.client = coalesce(q1.client, q2.client, q3.client);
select coalesce(q1.client, q2.client, q3.client, q4.client) as client,
       q1.Dahi, q2.Patr, q3.Orts, q4.Tyre
from (select client from q1 union
      select client from q2 union 
      select client from q3 union
      select client from q4
     ) driver left outer join
     q1
     on q1.client = driver.client left outer join
     q2
     on q2.client = driver.client left outer join
     q3
     on q3.client = driver.client left outer join
     q4
     on q4.client = driver.client;