请帮我看看这个sql语句是否正确,并改正:select a.ebeln, a.ebelp, a.art, a.kdauf, a.zbw, a.size1, a.txz01, a.menge, b.quantity, (a.menge - b.quantity) as OWE_MATERIAL, ( select sum(THIS_PLAN_QTY) as HAVE_PLAN , a.ebeln , a.ebelp , a.kdauf from SCM_OUTSOURCE_PRODUCTION_PLAN_LIST c , SCM_PROCESS_PURCHASE_ORDER_D a group by c.order_no , c.order_seq , c.sales_order , a.ebeln , a.ebelp , a.kdauf having c.order_no = a.ebeln And c.order_seq = a.ebelp And c.sales_order = a.kdauf ) , ( select a.menge - t.HAVE_PLAN as OWN_PLAY from (select sum(THIS_PLAN_QTY) as HAVE_PLAN , c.order_no , c.order_seq , c.sales_order from SCM_OUTSOURCE_PRODUCTION_PLAN_LIST c , SCM_PROCESS_PURCHASE_ORDER_D a group by c.order_no , c.order_seq , c.sales_order , a.ebeln , a.ebelp , a.kdauf having c.order_no = a.ebeln And c.order_seq = a.ebelp And c.sales_order = a.kdauf ) t , SCM_PROCESS_PURCHASE_ORDER_D a where a.ebeln = t.order_no and a.ebelp = t.order_seq and a.menge = t.sales_order ) , d.scan_qty, (d.quantity - d.scan_qty) as OWN_PRODUCE, e.scan_qty, (e.quantity - e.scan_qty) as OWE_SHIP from SCM_PROCESS_PURCHASE_ORDER_D a left join MMS_INOUT_BILL_M b On a.ebeln = b.purchase_order_number And a.ebelp = b.purchase_order_seq And a.kdauf = b.sales_order left join SCM_OUTSOURCE_PRODUCTION_PLAN_LIST c on a.ebeln = c.order_no And a.ebelp = c.order_seq And a.kdauf = c.sales_order left join SCM_PROCESS_OUTPUT d on a.ebeln = d.order_no And a.ebelp = d.order_seq And a.kdauf = d.sales_order left join SCM_OUTSOURCE_SHIP e on a.ebeln = e.qr_code and a.ebelp = e.order_no and a.kdauf = e.order_seq where a.art = 'IE7181' Order by a.ebeln desc, a.ebelp;
时间: 2023-11-27 16:52:36 浏览: 39
这个 SQL 语句比较复杂,但是有一些问题需要修改:
- 在子查询中,需要将 select 子句中的 a.ebeln, a.ebelp, a.kdauf 与 group by 子句中的字段保持一致,否则会出现错误。
- 子查询中的第一个 SELECT 子句需要加上 WHERE 子句,限制查询条件。
- 子查询中的第二个 SELECT 子句中的 a.menge 应该改为 t.sales_order。
- 在最后的 SELECT 子句中,d.scan_qty 与 e.scan_qty 都没有明确指定表名,可能会出现错误。
以下是修改后的 SQL 语句:
```
SELECT
a.ebeln,
a.ebelp,
a.art,
a.kdauf,
a.zbw,
a.size1,
a.txz01,
a.menge,
b.quantity,
(a.menge - b.quantity) AS OWE_MATERIAL,
(
SELECT
SUM(c.THIS_PLAN_QTY) AS HAVE_PLAN,
a.ebeln,
a.ebelp,
a.kdauf
FROM
SCM_OUTSOURCE_PRODUCTION_PLAN_LIST c,
SCM_PROCESS_PURCHASE_ORDER_D a
WHERE
c.order_no = a.ebeln
AND c.order_seq = a.ebelp
AND c.sales_order = a.kdauf
AND a.art = 'IE7181'
GROUP BY
c.order_no,
c.order_seq,
c.sales_order,
a.ebeln,
a.ebelp,
a.kdauf
),
(
SELECT
a.menge - t.sales_order AS OWN_PLAY
FROM
(
SELECT
SUM(c.THIS_PLAN_QTY) AS HAVE_PLAN,
c.order_no,
c.order_seq,
c.sales_order
FROM
SCM_OUTSOURCE_PRODUCTION_PLAN_LIST c,
SCM_PROCESS_PURCHASE_ORDER_D a
WHERE
c.order_no = a.ebeln
AND c.order_seq = a.ebelp
AND c.sales_order = a.kdauf
AND a.art = 'IE7181'
GROUP BY
c.order_no,
c.order_seq,
c.sales_order,
a.ebeln,
a.ebelp,
a.kdauf
) t,
SCM_PROCESS_PURCHASE_ORDER_D a
WHERE
a.ebeln = t.order_no
AND a.ebelp = t.order_seq
AND a.kdauf = t.sales_order
AND a.art = 'IE7181'
),
d.scan_qty,
(d.quantity - d.scan_qty) AS OWN_PRODUCE,
e.scan_qty,
(e.quantity - e.scan_qty) AS OWE_SHIP
FROM
SCM_PROCESS_PURCHASE_ORDER_D a
LEFT JOIN MMS_INOUT_BILL_M b ON a.ebeln = b.purchase_order_number AND a.ebelp = b.purchase_order_seq AND a.kdauf = b.sales_order
LEFT JOIN SCM_OUTSOURCE_PRODUCTION_PLAN_LIST c ON a.ebeln = c.order_no AND a.ebelp = c.order_seq AND a.kdauf = c.sales_order
LEFT JOIN SCM_PROCESS_OUTPUT d ON a.ebeln = d.order_no AND a.ebelp = d.order_seq AND a.kdauf = d.sales_order
LEFT JOIN SCM_OUTSOURCE_SHIP e ON a.ebeln = e.qr_code AND a.ebelp = e.order_no AND a.kdauf = e.order_seq
WHERE
a.art = 'IE7181'
ORDER BY
a.ebeln DESC,
a.ebelp;
```