1

在第一部分中,我们选择了一些记录并使用 Session 选项创建了一个“outfile”用于文件输出。我希望这两个部分都是一个 SQL。在第 2 部分中。我必须包括最后一个表的列。ad.IARCC9 当前的数据结果是这样的:数据显示了根据日期销售的零件编号,我们只需要包含最后一个列,这是对供应商的推荐。

QUANTITY       WWDOCD   PART NO.           
    1.00   20,121,205   MYAABC             
    1.00   20,130,619   MYAABC             
    1.00   20,130,619   MYAABC             
    1.00   20,130,726   MYAABC             
   25.00   20,120,629   AC-GL9             
   20.00   20,120,502   AC-GL9             
   30.00   20,120,425   AC-GL9             
   30.00   20,120,419   AC-GL9             
   20.00   20,120,411   AC-GL9             
   30.00   20,120,321   AC-GL9             

第1部分。

SELECT *
FROM astccdta.Oeinh48 a
JOIN astdta.IcDet1 b ON b.Itcom# = a.IhCom# AND b.ItTrn# = a.IhIdc#
WHERE A.IHORDD > 20120101 AND b.ItTscc = 'I'
--------

第2部分。

SELECT ItQty#,IhDocd,ItPRT#
FROM pklib.Fileout1 a
JOIN astdta.icEct1 b ON b.CtCom# = a.ItCom# AND b.CtCtr# = ' ' AND b.CtPrt# =a.ItPrt#
JOIN astdta.Audia ad ON ad.IAprt# = a.ItPrt#
WHERE ad.IARCC9 > ''
ORDER BY ad.IARCC9
4

1 回答 1

2

您在尝试避免临时中间输出文件方面处于正确的轨道上。

您想要在您的工具库中使用的工具称为公用表表达式[CTE]。这是一项强大的技术,允许您将复杂的SELECT 语句构建为一系列逻辑构建块。

你的可以像这样放在一起:

with f as
(
  SELECT *
    FROM astccdta.Oeinh48  a
    JOIN astdta.IcDet1     b   ON   b.Itcom# = a.IhCom#
                               AND b.ItTrn# = a.IhIdc#
    WHERE A.IHORDD > 20120101
      AND b.ItTscc = 'I'
)
SELECT ItQty#,IhDocd,ItPRT#
  FROM f     -- this refers to the result set of the CTE above
  JOIN astdta.icEct1  b   ON  b.CtCom# = f.ItCom#
                          AND b.CtPrt# = f.ItPrt#
                          AND b.CtCtr# = ' ' 
  JOIN  astdta.Audia  d   ON  d.IAprt# = f.ItPrt#
  WHERE a.IARCC9 > ''
  ORDER BY d.IARCC9;

附加说明:您可以轻松地使用 SQL 本身来创建输出文件,而不是使用 STRSQL 会话选项。只需在您的查询周围放一个小包装,如下所示:

CREATE TABLE fileout as
(
   -- your query goes here
)
WITH DATA;

或者,如果您想添加到现有文件

INSERT INTO fileout
   -- your query goes here
;

通过使用 SQL 而非会话设置来编写结果,您创建了一个可以从其他界面运行的解决方案。

于 2013-09-04T05:15:43.777 回答