简体   繁体   English

按帮助分组-Oracle SQL

[英]Group by Help - Oracle SQL

How would I implement a group by to this? 我将如何实现这一目标?

Tried just grouping by everything in the select and it doesn't appear to work. 尝试仅按选择中的所有内容进行分组,但似乎不起作用。

 SELECT SL.ORDER_NO,
   SL.HANDLING_UNIT_ID,
   HUS.MANUAL_GROSS_WEIGHT,
   SL.OBJVERSION,
         ACCOUNTING_PERIOD_API.GET_PERIOD_DESCRIPTION(SITE_API.GET_COMPANY(SHIPMENT_API.GET_CONTRACT(HUS.SHIPMENT_ID)),
                                                                                                    ACCOUNTING_PERIOD_API.GET_CURR_ACC_YEAR(SITE_API.GET_COMPANY(SHIPMENT_API.GET_CONTRACT(HUS.SHIPMENT_ID))),
                                                                                                    ACCOUNTING_PERIOD_API.GET_CURR_ACC_PERIOD(SITE_API.GET_COMPANY(SHIPMENT_API.GET_CONTRACT(HUS.SHIPMENT_ID)))) ACC_DESC,
         HUS.WIDTH,
         HUS.HEIGHT,
         HUS.DEPTH,
         SL.QUANTITY * IFSAPP.HANDLING_UNIT_API.GET_TARE_WEIGHT(HUS.HANDLING_UNIT_ID, HUS.UOM_FOR_WEIGHT) TOTAL_WEIGHT_KGS,
         HUS.HANDLING_UNIT_TYPE_ID CASE_NOS,
         HUS.WIDTH * HUS.HEIGHT * HUS.DEPTH DIMENSIONS,
         HUS.WIDTH * HUS.HEIGHT * HUS.DEPTH * 3 / 1000000 TOTAL_CUBE_BOX
    FROM   SHIPMENT_LINE_HANDL_UNIT SL
    JOIN   HANDLING_UNIT_SHIPMENT_CFV HUS
    ON     HUS.SHIPMENT_ID = SL.SHIPMENT_ID
   JOIN   SHIPMENT S
   ON     S.SHIPMENT_ID = SL.SHIPMENT_ID
   JOIN   CUSTOMER_ORDER CO
   ON     CO.ORDER_NO = S.ORDER_NO
   WHERE  SHIPMENT_API.GET_STATE(HUS.SHIPMENT_ID) = 'Completed'
         AND SHIPMENT_API.GET_CONTRACT(HUS.SHIPMENT_ID) = '1314'
   AND SL.HANDLING_UNIT_ID = HUS.HANDLING_UNIT_ID
   AND S.SHIP_VIA_CODE = 'SEA'
   AND CO.REGION_CODE = 'AM'

Expected data: 预期数据:

Shiptrain7       1  102 102 111x93x106  RPL111x93x106   93     111   106      3.28


Shiptrain7       1  57  57  111x93x106  RPL111x93x106   93     111   106      3.28


Shiptrain8      1   150 150 111x93x106  RPL111x93x106   93     111   106      3.28

Shiptrain8      1   2   2   35x26x33        RPL35x26x33 26     35      33        3.28

当前结果

There is just one of each case, the handling unit id is associated to each case. 每种情况只有一种,处理单元ID与每种情况相关。 Its bringing the actual ID rather than amount of each case which is 1. Also, this is being used in a crystal report so ignore the fields which arent needed. 它带来的是实际ID,而不是每种情况下的实际ID(即1)。此外,它在Crystal Report中使用,因此请忽略所需的字段。

You want to GROUP BY everything in the projection except the handling_unit_id , which you just want to count. 你想GROUP BY以外的一切都在投影handling_unit_id ,你只想计数。 You could alter the existing query, but you have a large number of derived columns which will make the GROUP BY clause complicated and brittle. 您可以更改现有查询,但是您拥有大量派生列,这会使GROUP BY子句变得复杂而脆弱。

So you should wrap the existing query in another query which you can use for aggregation. 因此,您应该将现有查询包装在另一个可用于聚合的查询中。 Note that you must give an alias to each column in the query. 请注意,您必须为查询中的每一列指定别名。

select order_no
       , count(handling_unit_id) as no_of_units
       , manual_gross_weight
       , objversion
       ,  acct_period_description
        ,  acct_period
       , acc_desc
       , width
       , height
       , depth
       , total_weight_kgs
       , case_nos
       , dimensions
        , total_cube_box
from (
     SELECT SL.ORDER_NO,
       SL.HANDLING_UNIT_ID,
       HUS.MANUAL_GROSS_WEIGHT,
       SL.OBJVERSION,
       ACCOUNTING_PERIOD_API.GET_PERIOD_DESCRIPTION(SITE_API.GET_COMPANY(SHIPMENT_API.GET_CONTRACT(HUS.SHIPMENT_ID)) as  acct_period_description,
       ACCOUNTING_PERIOD_API.GET_CURR_ACC_YEAR(SITE_API.GET_COMPANY(SHIPMENT_API.GET_CONTRACT(HUS.SHIPMENT_ID))) as acct_period,
       ACCOUNTING_PERIOD_API.GET_CURR_ACC_PERIOD(SITE_API.GET_COMPANY(SHIPMENT_API.GET_CONTRACT(HUS.SHIPMENT_ID)))) ACC_DESC,
             HUS.WIDTH,
             HUS.HEIGHT,
             HUS.DEPTH,
             SL.QUANTITY * IFSAPP.HANDLING_UNIT_API.GET_TARE_WEIGHT(HUS.HANDLING_UNIT_ID, HUS.UOM_FOR_WEIGHT) TOTAL_WEIGHT_KGS,
             HUS.HANDLING_UNIT_TYPE_ID CASE_NOS,
             HUS.WIDTH * HUS.HEIGHT * HUS.DEPTH DIMENSIONS,
             HUS.WIDTH * HUS.HEIGHT * HUS.DEPTH * 3 / 1000000 TOTAL_CUBE_BOX
        FROM   SHIPMENT_LINE_HANDL_UNIT SL
        JOIN   HANDLING_UNIT_SHIPMENT_CFV HUS
        ON     HUS.SHIPMENT_ID = SL.SHIPMENT_ID
       JOIN   SHIPMENT S
       ON     S.SHIPMENT_ID = SL.SHIPMENT_ID
       JOIN   CUSTOMER_ORDER CO
       ON     CO.ORDER_NO = S.ORDER_NO
       WHERE  SHIPMENT_API.GET_STATE(HUS.SHIPMENT_ID) = 'Completed'
             AND SHIPMENT_API.GET_CONTRACT(HUS.SHIPMENT_ID) = '1314'
       AND SL.HANDLING_UNIT_ID = HUS.HANDLING_UNIT_ID
       AND S.SHIP_VIA_CODE = 'SEA'
       AND CO.REGION_CODE = 'AM'
) 
group by order_no
       , manual_gross_weight
       , objversion
       ,  acct_period_description
        ,  acct_period
       , acc_desc
       , width
       , height
       , depth
       , total_weight_kgs
       , case_nos
       , dimensions
        , total_cube_box

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM