这是我需要的正确 SQL 吗? [JDE, DB2]
Is this the correct SQL for what I need? [JDE, DB2]
考虑以下 JD Edwards 数据库 tables:
- 工单路由(实际名称:F3112)
- 工单时间交易(实际名称:F31122)
table 由一个公共字段链接:文档编号 (DOCO)。
对于 F3112 中的给定记录,F31122 中可能有零个或多个记录。
我正在尝试编写一个查询,其中 returns 来自 F3112 的记录满足以下条件:
- F31122 中至少有一条匹配记录 F31122.WTHRW(工作小时数)> 0。
- F3112.WLOPST(状态码)30到99(含)之间。
- F3112.WLSTRT(开始日期)>=指定日期(JDE Julian 日期)。
- F3112.WLCTS4(金额 - 未计直接人工)= 0 OR F3112.WLCTS9(小时数 - 未计直接人工)= 0.
我想出了以下 SQL 似乎得到了我想要的 - 但我不是 100% 确定。
SELECT DISTINCT F3112.WLDOCO AS DOC_NO,
F3112.WLDCTO AS DOC_TYPE,
F3112.WLOPST AS STATUS,
F3112.WLCTS4 AS CTS4,
F3112.WLCTS9 AS CTS9,
F3112.WLSTRT AS START,
F3112.WLSTRX AS COMPLETE
FROM PROD2DTA.F3112 F3112
INNER JOIN PROD2DTA.F31122 F31122
ON F3112.WLDOCO = F31122.WTDOCO
AND (SELECT COUNT(*)
FROM PROD2DTA.F31122
WHERE F31122.WTHRW <> 0) > 0
WHERE F3112.WLOPST BETWEEN '30' AND '99'
AND F3112.WLSTRT >= 121060
AND ( F3112.WLCTS4 = 0
OR F3112.WLCTS9 = 0 )
我不需要 return F31122 table 的任何东西。我只需要确保满足选择标准的第一个项目符号。
我本来没有 DISTINCT 子句,结果被多次点击。我假设这是笛卡尔积的情况。
这对我正在尝试做的事情有意义吗?如果没有,请告诉我我需要做什么。
您的描述似乎需要相关的 EXISTS 条件。在您首先尝试修复任何引入的重复项之前,不要使用 DISTINCT。
SELECT F3112.WLDOCO AS DOC_NO,
F3112.WLDCTO AS DOC_TYPE,
F3112.WLOPST AS STATUS,
F3112.WLCTS4 AS CTS4,
F3112.WLCTS9 AS CTS9,
F3112.WLSTRT AS START,
F3112.WLSTRX AS COMPLETE
FROM PROD2DTA.F3112 F3112
WHERE EXISTS (SELECT 1 FROM PROD2DTA.F31122 F31122
WHERE F3112.WLDOCO = F31122.WTDOCO
AND F31122.WTHRW > 0)
AND F3112.WLOPST BETWEEN '30' AND '99'
AND F3112.WLSTRT >= 121060
AND ( F3112.WLCTS4 = 0
OR F3112.WLCTS9 = 0 )
考虑以下 JD Edwards 数据库 tables:
- 工单路由(实际名称:F3112)
- 工单时间交易(实际名称:F31122)
table 由一个公共字段链接:文档编号 (DOCO)。 对于 F3112 中的给定记录,F31122 中可能有零个或多个记录。
我正在尝试编写一个查询,其中 returns 来自 F3112 的记录满足以下条件:
- F31122 中至少有一条匹配记录 F31122.WTHRW(工作小时数)> 0。
- F3112.WLOPST(状态码)30到99(含)之间。
- F3112.WLSTRT(开始日期)>=指定日期(JDE Julian 日期)。
- F3112.WLCTS4(金额 - 未计直接人工)= 0 OR F3112.WLCTS9(小时数 - 未计直接人工)= 0.
我想出了以下 SQL 似乎得到了我想要的 - 但我不是 100% 确定。
SELECT DISTINCT F3112.WLDOCO AS DOC_NO,
F3112.WLDCTO AS DOC_TYPE,
F3112.WLOPST AS STATUS,
F3112.WLCTS4 AS CTS4,
F3112.WLCTS9 AS CTS9,
F3112.WLSTRT AS START,
F3112.WLSTRX AS COMPLETE
FROM PROD2DTA.F3112 F3112
INNER JOIN PROD2DTA.F31122 F31122
ON F3112.WLDOCO = F31122.WTDOCO
AND (SELECT COUNT(*)
FROM PROD2DTA.F31122
WHERE F31122.WTHRW <> 0) > 0
WHERE F3112.WLOPST BETWEEN '30' AND '99'
AND F3112.WLSTRT >= 121060
AND ( F3112.WLCTS4 = 0
OR F3112.WLCTS9 = 0 )
我不需要 return F31122 table 的任何东西。我只需要确保满足选择标准的第一个项目符号。
我本来没有 DISTINCT 子句,结果被多次点击。我假设这是笛卡尔积的情况。
这对我正在尝试做的事情有意义吗?如果没有,请告诉我我需要做什么。
您的描述似乎需要相关的 EXISTS 条件。在您首先尝试修复任何引入的重复项之前,不要使用 DISTINCT。
SELECT F3112.WLDOCO AS DOC_NO,
F3112.WLDCTO AS DOC_TYPE,
F3112.WLOPST AS STATUS,
F3112.WLCTS4 AS CTS4,
F3112.WLCTS9 AS CTS9,
F3112.WLSTRT AS START,
F3112.WLSTRX AS COMPLETE
FROM PROD2DTA.F3112 F3112
WHERE EXISTS (SELECT 1 FROM PROD2DTA.F31122 F31122
WHERE F3112.WLDOCO = F31122.WTDOCO
AND F31122.WTHRW > 0)
AND F3112.WLOPST BETWEEN '30' AND '99'
AND F3112.WLSTRT >= 121060
AND ( F3112.WLCTS4 = 0
OR F3112.WLCTS9 = 0 )