2013-08-30 30 views
1

在第一部分中,我們選擇了一些記錄並使用Session選項爲文件輸出創建了「outfile」。我希望這兩個部分都是一個SQL。在第2部分中,我必須包括最後一個表的列。 ad.IARCC9目前的數據結果是這樣的:數據顯示根據我們只需要包含的最後一個col的日期銷售的part#,這是供應商的推薦。需要在IBM i上向此sql添加一些項目

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 

回答

2

您在試圖避免臨時的中間OUTFILE在正確的軌道上。

你需要的工具稱爲common table expression [CTE]。這是一種功能強大的技術,可讓您將複雜的SELECT statement構建爲一系列邏輯構建塊。

此致可以放在一起這樣的:

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; 

附加說明:而不是使用STRSQL會話選項,你可以很容易地使用SQL自己創建一個OUTFILE。只要放一點點來包裹你的查詢是這樣的:

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

或者,如果你想添加到現有文件

INSERT INTO fileout 
    -- your query goes here 
; 

通過使用SQL來寫你的結果,而不是會話設置,你有創建了一個可以從其他界面運行的解決方案。

相關問題