Oracle加入两个具有明显答案的查询

时间:2014-12-04 11:36:44

标签: oracle join distinct

我需要帮助将两个表链接在一起,以便根据需要恢复数据。 我有两个问题: 第一个如下:

    SELECT 
        POI.PO_ID as PO_ID, SUM(POI.INV_QTY) AS INV_QTY, POI.INV_NUMBER, 
        PO.SUP_SUP_ID AS SUPPLIER

    FROM TABLE1 POI, PUR_ORDS PO
    WHERE POI.PO_ID = '56886' AND POI.PO_ID = PO.PO_ID
    GROUP BY POI.PO_ID, POI.INV_NUMBER, PO.SUP_SUP_ID
    ORDER BY POI.INV_NUMBER ASC

此查询的结果如下:

PO_ID|INV_QTY|INV_NUMBER|SUPPLIER
---------------------------------
56886|    105|INV1      |SUP1
56886|    106|INV2      |SUP1

我的第二个问题是:

    SELECT 
        DIL.PO_PO_ID, sum(DIL.ACPTD_QTY) as ACPTD_QTY, 
        DIL.DLVD_DLVY_NUMB AS DEL_NUM
    FROM TABLE2 DIL
    where DIL.PO_PO_ID = '56886'
    GROUP BY PO_PO_ID, DIL.DLVD_DLVY_NUMB
    order by del_num

此查询的结果如下:

PO_PO_ID|ACPTD_QTY|DEL_NUM
--------------------------
   56886|      105|      1
   56886|      106|      2

现在我正在尝试加入这两个表,但是我使用以下内容显示多个值:

SELECT  DISTINCT(PO_ID), INV_NUMBER, INV_QTY, SUPPLIER, ACPTD_QTY, DEL_NUM
FROM
(SELECT 
            SELECT POI.PO_ID as PO_ID, SUM(POI.INV_QTY) AS INV_QTY, 
                POI.INV_NUMBER, PO.SUP_SUP_ID AS SUPPLIER
            FROM TABLE1 POI, PUR_ORDS PO
            WHERE POI.PO_ID = '56886'
            AND POI.PO_ID = PO.PO_ID
            GROUP BY POI.PO_ID, POI.INV_NUMBER, PO.SUP_SUP_ID
            ORDER BY POI.INV_NUMBER ASC) POINET
INNER JOIN
(SELECT DIL.PO_PO_ID, sum(DIL.ACPTD_QTY) as ACPTD_QTY, 
                DIL.DLVD_DLVY_NUMB AS DEL_NUM
            FROM TABLE 2 DIL
            where DIL.PO_PO_ID = '56886'
            GROUP BY PO_PO_ID, DIL.DLVD_DLVY_NUMB
            order by DEL_NUM) DILV

            ON DILV.PO_PO_ID = POINET.PO_ID
            GROUP BY PO_ID, INV_NUMBER, INV_QTY, SUPPLIER, ACPTD_QTY, DEL_NUM
            ORDER BY INV_NUMBER

然而,我得到的数据集是:

PO_ID|INV_NUMBER   |INV_QTY|SUPPLIER|ACPTD_QTY|DEL_NUM
-----------------------------------------------------
56886|K-101/2014-15|    105|SUP1    |      105|     1
56886|K-101/2014-15|    105|SUP1    |      106|     2
56886|K-107/2014-15|    106|SUP1    |      105|     1
56886|K-107/2014-15|    106|SUP1    |      106|     2

但是我需要它显示以下内容:

PO_ID|INV_NUMBER   |INV_QTY|SUPPLIER|ACPTD_QTY|DEL_NUM
------------------------------------------------------
56886|K-101/2014-15|    105|SUP1    |      105|      1
56886|K-107/2014-15|    106|SUP1    |      106|      2

我需要做什么来调整我的查询? 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为您只需修改您的连接语句即可加入两个列

ON DILV.PO_PO_ID = POINET.PO_ID
AND DILV.INV_QTY = POINET.ACPTD_QTY

实际上,您可以省略PO_ID,因为我在两个子查询中都是相同的:

即。就这样做(在第三行):

ON DILV.INV_QTY = POINET.ACPTD_QTY