具有复杂SELECT的函数分组

时间:2014-09-01 08:05:14

标签: sql oracle

我有这个声明,从大数据库中选择数量和产品数量的总和

  SELECT
        (SELECT Name FROM AD_Org WHERE AD_Org_ID = 1000001
        ) AS Org,
        (SELECT bp.Name FROM C_BPartner bp WHERE bp.C_BPARTNER_ID = 0
        ) AS Selected_Vendor,
        (SELECT MAX(bp.Name)
        FROM C_BPartner bp
        WHERE EXISTS
          (SELECT 1
          FROM M_Product_PO po
          WHERE bp.C_BPARTNER_ID =po.C_BPARTNER_ID
          AND po.M_PRODUCT_ID    = p.M_PRODUCT_ID
          AND po.ISCURRENTVENDOR ='Y'
          AND AD_Org_ID          = 1000001
          )
        )                                  AS Vendor,
        p.Value                            AS Value_Product,
        p.Name                             AS Name_Product,
        COALESCE( SUM(ol.QTYORDERED) , 0)  AS qty_bought ,
        COALESCE( SUM(ol.LINENETAMT) , 0)  AS Amount_bought ,
        COALESCE( SUM(ol2.QTYORDERED) , 0) AS qty_sales ,
        COALESCE( SUM(ol2.LINENETAMT) , 0) AS Amount_sales,
        bomOffQtyOnHand(p.M_PRODUCT_ID,
        (SELECT NVL(M_WAREHOUSE_ID,0) FROM AD_OrgInfo WHERE AD_Org_ID = 1000001
        ), NULL) AS STOCK,
        (SELECT Name FROM M_PRODUCT_CATEGORY pc WHERE pc.M_PRODUCT_CATEGORY_ID =0
        ) AS Product_Category
      FROM M_Product p
      LEFT OUTER JOIN C_OrderLine ol
      ON (p.m_product_id = ol.m_product_id)
      INNER JOIN C_Order o
    ....
    ....

      WHERE (p.M_PRODUCT_CATEGORY_ID =0
     ....
     ....
     )
 ORDER BY p.value,
        p.Nam

这句话给我总是小组功能错误

ORA-00937: not a single-group group function

当我把这些行修复它时,它会错误地给另一个组

 GROUP BY SUM(ol.QTYORDERED) ,
SUM(ol.LINENETAMT),
SUM(ol2.QTYORDERED),
SUM(ol2.LINENETAMT),
 p.Value,
 p.name

错误

ORA-00934: group function is not allowed here

我想我必须将所有选定的项目放入群组中,以便我如何将此

(SELECT Name FROM AD_Org WHERE AD_Org_ID = 1000001
        ) AS Org,

或者

 (SELECT MAX(bp.Name)
        FROM C_BPartner bp
        WHERE EXISTS
          (SELECT 1
          FROM M_Product_PO po
          WHERE 
          ....
          AND AD_Org_ID          = 1000001
          )
        )   AS Vendor,

group by或任何其他方法来修复此错误

1 个答案:

答案 0 :(得分:0)

您在此处与SUM汇总:

COALESCE( SUM(ol.QTYORDERED) , 0)  AS qty_bought ,
COALESCE( SUM(ol.LINENETAMT) , 0)  AS Amount_bought ,
COALESCE( SUM(ol2.QTYORDERED) , 0) AS qty_sales ,
COALESCE( SUM(ol2.LINENETAMT) , 0) AS Amount_sales,

所以其他一切(p.Value,p.Name,p.M_PRODUCT_ID)也必须在GROUP BY子句中,或者也要聚合(例如MIN(p.Value))。

相关问题