未结销售订单

时间:2018-09-27 04:44:07

标签: sql sap hana

我的目的是在S / 4 hana系统上编写SQL查询以获取未结销售订单的列表。

未结销售订单是指已部分发货或完全未发货的订单。

我有两个表-销售订单表和发货订单表

销售订单表-表1

VBELN-订单号-主键

Ord_qty-订购数量

表格中的值

VBELN    ORD_QTY

1         10

2         20

3         30

已发货订单表-表2

SHIP_ORD-发货号码-主键

VBELN-订单号-表1中的外键

Ship_qty-装运数量

表2中的值

SHIP_ORD    VBELN     SHIP_QTY

100          1         4

200          1         5

300          2         20

我写了这个查询。这使我返回

VBELN    ORD_QTY   SHIP_QTY

1         10          9

但我希望它还为尚未发货的订单返回另一个记录3 30 0。

这是我的查询

获取未结订单,即未发货的订单和未完全发货的订单

SELECT a~vbeln,sum( b~ship_qty ) as ship_qty, sum( ORD_QTY ) as ord_type
     INTO TABLE @DATA(LT_DATA)
       from zvic_order as a
       left outer join zvic_ship as b
       on a~vbeln = b~vbeln
       where b~ship_qty is not null or
       b~ship_qty is null
       GROUP BY A~VBELN
       HAVING sum( ord_qty ) > sum( b~ship_qty ) .  

我认为这是有条件的,以便从发货表中删除NULL条目,但是我不知道其他任何方式来编写此查询并获得所需的结果。

PS:我可以在没有条件的情况下获取记录,然后在记录上循环并过滤掉,但我的目标是直接从查询中获取结果。

3 个答案:

答案 0 :(得分:0)

尝试一下-

SELECT a~vbeln,sum( b~ship_qty ) as ship_qty, sum( ORD_QTY ) as ord_type
INTO TABLE @DATA(LT_DATA)
   from zvic_order as a
   left outer join (SELECT b~VBELN, SSUM(SHIP_QTY) SHIP_QTY
                    FROM zvic_ship
                    GROUP BY b~VBELN) as b
   on a~vbeln = b~vbeln
   GROUP BY A~VBELN
   HAVING sum( ord_qty ) > sum( b~ship_qty )
          OR sum( b~ship_qty ) IS NULL

答案 1 :(得分:0)

请问您可以尝试执行以下SQL SELECT命令吗?

select
    o.vbeln,
    o.ord_qty,
    s.ship_qty
from zvic_order as o
left outer join (
    select VBELN, sum(SHIP_QTY) as ship_qty from zvic_ship group by VBELN
) as s on o.vbeln = s.vbeln
where o.ord_qty > ifnull(s.ship_qty,0);

它产生以下输出

enter image description here

答案 2 :(得分:0)

对SUM()使用IFNULL可以正确处理根本没有发送的行

SELECT vbeln, ord_qty, IFNULL(SUM(ship_qty),0) as total_shipped
FROM (SELECT o.vbeln, ord_qty, s.ship_qty
      FROM zvic_order o
      LEFT JOIN zvic_ship s ON s.vbeln = o.vbeln ) as j
GROUP BY vbeln
HAVING (ord_qty > total_shipped)