将多个连接结果返回1到一行

时间:2019-08-27 19:57:48

标签: sql oracle pivot

我正在尝试编写一个涉及3个联接的查询,并且联接之一在同一列上具有多个记录的表上,我试图在单个行中返回所有结果。因此,如果我有3张桌子:

Table 1 
| order_ID | order_number
+----------| ---------
|  1       | 4384368434
|  2       |5343443584
|  3       |584364684
+----------+-----------

Table 2
+--------------+--------------------+-----------------
| order_seq_id | data_dictionary_id | node_value_text |
+--------------+--------------------+-----------------
|            1 |                101 |Value
|            2 |                105 |Value
|            3 |                110 |Value
+--------------+--------------------+----------------
table 3

+--------------------+--------------------------+
| data_dictionary_id | DATA_DICTIONARY_MNEMONIC |
+--------------------+--------------------------+
|                101 | 'InitialOrderNumber'     |
|                105 | 'InitialOrderDueDate'    |
|                110 | 'OrderDetails'           |
+--------------------+--------------------------+

我要返回的行是:

Order_ID | DATA_DICTIONARY_MNEMONIC 1| node_value_text 1 | DATA_DICTIONARY_MNEMONIC 2 | node_value_text 2 | 
-------------------------------------------------------------------------------------- | ------------------------
 1       | InitialOrderNumber        |  '1256214214'    |  InitialOrderDueDate         | 'Jan 1st'

因此,我想尽可能返回一个单行,该单行具有表1中的所有行(超过了我上面的行)以及另外2个包含InitialOrderNumber和InitialOrderDueDate表2中的node_value_text值的列。 Order_ID连接到order_seq_id上,该命令使用data_dictionary_id连接到表3,以查找哪个data_dictionary_id用于InitialOrderNumbers和Duedates。

我尝试像这样连接同一张表:

 SELECT a.order_number, b.order_seq_id, b.node_value_text, 
c.DATA_DICTIONARY_MNEMONIC, d.DATA_DICTIONARY_MNEMONIC
FROM table1 a
INNER JOIN table2 b
ON a.order_id = b.order_seq_id
INNER JOIN table3 c
ON B.DATA_DICTIONARY_ID = c.data_dictionary_id
INNER JOIN om_prod.om_order_data_dictionary d
ON B.DATA_DICTIONARY_ID = d.data_dictionary_id
WHERE a.order_id like '3035880'
AND c.DATA_DICTIONARY_MNEMONIC ='InitialOrderNumber'
AND d.DATA_DICTIONARY_MNEMONIC ='InitialOrderDueDate';

但是没有成功。我是否参加了两次正确的比赛?还是有更好的方法来做到这一点?

使用a.order_id(例如“ 3035880”)进行测试。

0 个答案:

没有答案
相关问题