我对这一转变感到震惊
MYSQL
IF((select SUM(MT2.TOTAL) from U_001_01_MMTRANS MT2 where MT2.CMPGLINEREF!=0 AND MT2.MAINLINEREF
IN (select MT3.LOGICALREF from U_001_01_MMTRANS MT3 where MT3.ITEMREF=ITM.LOGICALREF AND MT3.LINETYPE=0 AND MT3.INVOICEREF=INV.LOGICALREF)) IS NULL, 0.00,
(select SUM(MT2.TOTAL) from U_001_01_MMTRANS MT2 where MT2.CMPGLINEREF!=0 AND MT2.MAINLINEREF
IN (select MT3.LOGICALREF from U_001_01_MMTRANS MT3 where MT3.ITEMREF=ITM.LOGICALREF AND MT3.LINETYPE=0 AND MT3.INVOICEREF=INV.LOGICALREF))) AS TRAONV我曾试图这样做,但没有被接受:
PostgreSQL
CASE when
(select SUM(MT4.TOTAL) from U_002_01_MMTRANS MT4
where MT4.CMPGLINEREF!=0 AND MT4.MAINLINEREF
IN (select MT5.LOGICALREF from U_002_01_MMTRANS MT5 where MT5.ITEMREF=ITM.LOGICALREF
AND MT5.LINETYPE=0 AND MT5.INVOICEREF=INV.LOGICALREF)) IS NULL then 0.00
else
(select SUM(MT4.TOTAL) from U_002_01_MMTRANS MT4 where MT4.CMPGLINEREF !=0 AND MT4.MAINLINEREF
IN (select MT5.LOGICALREF from U_002_01_MMTRANS MT5 where MT5.ITEMREF=ITM.LOGICALREF AND MT5.LINETYPE=0
AND MT5.INVOICEREF=INV.LOGICALREF)) end as TRAONV有谁可以帮我?
发布于 2022-08-18 05:00:08
MySQL查询效率低得离谱,因为您重复两次相同的查询以获得单个结果。
在PostgreSQL中,您可以使用coalesce()函数返回列表中的第一个非空元素,如下所示:
select coalesce(SUM(TOTAL), 0.00) as TRAONV
from U_001_01_MMTRANS
where CMPGLINEREF <> 0
and MAINLINEREF IN (
select MT3.LOGICALREF
from U_001_01_MMTRANS MT3
join ITM on MT3.ITEMREF = ITM.LOGICALREF -- check these joins
join INV on MT3.INVOICEREF = INV.LOGICALREF -- possibly other conditions
where MT3.LINETYPE = 0 -- or WHERE clauses necessary
)由于您的查询没有完成,这不过是最大的努力。
我希望这也清楚地说明了正确格式化查询的价值。
https://stackoverflow.com/questions/73397383
复制相似问题