像这样的SQL语句该如何优化
表INFO_DETAIL和表MODEL没有可以用于连接的字段
select
nvl((select sum(p.qty) from INFO_DETAIL p where p.proc_no ='TOP' and p.create_date>sysdate-40
and p.board in (SELECT A.Item_Code FROM MODEL a where a.custom='T')),0) as 数量1,
nvl((select sum(p.qty) from INFO_DETAIL p where p.proc_no ='BOT' and p.create_date>sysdate-40
and p.board in (SELECT A.Item_Code FROM MODEL a where a.custom='T')),0) 数量2,
nvl((select sum(p.qty) from INFO_DETAIL p where p.proc_no ='TOP' and p.create_date>sysdate-40
and p.board in (SELECT A.Item_Code FROM MODEL a where a.custom='N')),0) as 数量3,
nvl((select sum(p.qty) from INFO_DETAIL p where p.proc_no ='BOT' and p.create_date>sysdate-40
and p.board in (SELECT A.Item_Code FROM MODEL a where a.custom='N')),0) as 数量4
from dual
ChatGPT尝试为您解答,仅供参考
这个查询可以优化如下:
SELECT
SUM(CASE WHEN p.proc_no = 'TOP' AND p.custom = 'T' THEN p.qty ELSE 0 END) AS 数量1,
SUM(CASE WHEN p.proc_no = 'BOT' AND p.custom = 'T' THEN p.qty ELSE 0 END) AS 数量2,
SUM(CASE WHEN p.proc_no = 'TOP' AND p.custom = 'N' THEN p.qty ELSE 0 END) AS 数量3,
SUM(CASE WHEN p.proc_no = 'BOT' AND p.custom = 'N' THEN p.qty ELSE 0 END) AS 数量4
FROM (
SELECT p.qty, p.proc_no, m.custom
FROM INFO_DETAIL p
INNER JOIN MODEL m ON p.board = m.Item_Code
WHERE p.create_date BETWEEN SYSDATE - 40 AND SYSDATE
) p;
请注意,上述优化建议均基于假设,因此在实际使用时可能需要进行调整