简体   繁体   中英

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. 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.

You want to GROUP BY everything in the projection except the handling_unit_id , which you just want to count. 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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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