0

我的目标是在 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:我可以在没有条件的情况下获取记录,然后循环记录并过滤掉,但我的目标是直接从查询中获取结果。

4

3 回答 3

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
于 2018-09-27T15:30:34.200 回答
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);

它产生以下输出

在此处输入图像描述

于 2018-09-28T06:30:35.033 回答
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)
于 2018-09-28T07:15:43.970 回答