使用子查询获取数据的SQL命令

问题描述 投票:0回答:1

我正在尝试通过使用 3 个表的联接来获取一些数据,例如

PRODUCT_ID
PRODUCT_TITLE
STOCK
。第3张桌子看起来像这样

-----------
| METERS  |
-----------
| METER_ID|
| PARK_ID |
| ZONE_ID |
-----------

----------------------
|  MT_PRODUCT_DETAILS |
----------------------
|  PRODUCT_ID         |
|  PRODUCT_TITLE      |
|  DESCRIPTION        |
-----------------------         

-----------------------
| MT_AS_EVENT_CURRENT  |
-----------------------
| DEVICE_ID             |
| MORE_DATA             |
| PRODUCT_ID            |
| STOCK_PRODUCT         |
| STATUS                |
| DATE_DEVICE           |
| EVENT_TYPE_ID         |
-------------------------

我想使用此查询获取所有产品的库存数量。

SELECT 
    PRODUCT_TITLE, SUM(REMAINING_STOCK) STOCK 
FROM
    (SELECT 
         PRODUCT_TITLE, REMAINING_STOCK 
     FROM 
         (SELECT 
              PRODUCT_ID, SUM(REMAINING_STOK) REMAINING_STOCK 
          FROM 
              (SELECT 
                   METER_ID, PRODUCT_ID, MAX(REMAINING_STOCK) keep
            (DENSE_RANK last ORDER BY DATE_DEVICE) REMAINING_STOCK  
               FROM 
                   (SELECT 
                        METERS.METER_ID, DATE_DEVICE, PRODUCT_ID, STOCK_PRODUCT REMAINING_STOCK 
                    FROM 
                        MT_AS_EVENT_CURRENT EV 
                    INNER JOIN
                        METERS ON EV.DEVICE_ID = METERS.METER_ID
                    WHERE 
                        EVENT_TYPE_ID = 1111
                        AND EV.DATE_DEVICE BETWEEN SYSDATE - 60 AND SYSDATE)
               GROUP BY
                   METER_ID, PRODUCT_ID)
        GROUP BY
            PRODUCT_ID) STOCKS 
    INNER JOIN
        MT_PRODUCT_DETAILS PRODUCT ON STOCKS.PRODUCT_ID = PRODUCT.PRODUCT_ID) 
GROUP BY 
    PRODUCT_TITLE

通过使用此查询,我可以获取

STOCK
计数和
PRODUCT_TITLE
的数据,但无法获取
PRODUCT_ID

有人可以告诉我如何通过在查询中进行一些微小的更改来获得

PRODUCT_ID
吗?

仅供参考,我尝试在外部查询本身中使用

PRODUCT_ID

 。但不知怎的,这不起作用。

输出应为 Product_ID、Product_TITLE、STOCK(总数量)GROUP BY PRODUCT_TITLE

oracle oracle-sqldeveloper
1个回答
0
投票
尝试简化您的查询并在内部查询本身中添加

PRODUCT_TITLE

,这应该会产生您想要的输出,如下所示:

SELECT T.PRODUCT_ID, T.PRODUCT_TITLE, SUM(REMAINING_STOK) REMAINING_STOCK FROM ( SELECT METERS.METER_ID, EV.PRODUCT_ID, MAX(EV.STOCK_PRODUCT) KEEP(DENSE_RANK LAST ORDER BY EV.DATE_DEVICE) REMAINING_STOCK, PRODUCT.PRODUCT_TITLE FROM MT_AS_EVENT_CURRENT EV INNER JOIN METERS ON EV.DEVICE_ID = METERS.METER_ID INNER JOIN MT_PRODUCT_DETAILS PRODUCT ON EV.PRODUCT_ID = PRODUCT.PRODUCT_ID WHERE EV.EVENT_TYPE_ID = 1111 AND EV.DATE_DEVICE BETWEEN SYSDATE - 60 AND SYSDATE GROUP BY METERS.METER_ID, EV.PRODUCT_ID, PRODUCT.PRODUCT_TITLE ) T GROUP BY T.PRODUCT_ID, T.PRODUCT_TITLE;
    
© www.soinside.com 2019 - 2024. All rights reserved.