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