2016-07-21 5 views
0

これは私が注文に関する情報を格納するテーブルを持っているIBMIシリーズ7SQLステートメントは、前の行のステータス=「C」AS400

のSQL上で実行されている行を選択します。各行には、注文番号(ON)、部品番号(PN)、およびシーケンス番号(SEQ)があります。各ONには複数のPNがリンクされ、各部品番号には複数のSEQ番号があります。各シーケンス番号は、部品の作業を行う順序を表します。部品がある場所にあり、作業準備が整ったら、システム内のどこか他の場所にフラグが表示されます。私がしたいのは、まだ到着していないが、前の場所で閉じられている場所の注文のリストを取得することです(つまり、その部分はその通りです)。

私は以下のエラーが表示されますが、次のエラーが表示されます。 "列の修飾子またはテーブルが未定義です"。私の問題はどこにありますか? Cluttonの回答は、わずかな変更で働いていたこの問題で他の誰のための

Select * From (SELECT M2ON as Order__Number , M2SEQ as Sequence__Number, 
M2PN as Product__Number,ML2OQ as Order__Quantity      
FROM M2P 
WHERE M2pN in (select R1PN FROM R1P WHERE (RTWC = '7411') AND (R1SEQ = M2SEQ) 
)        
AND M2ON IN (SELECT M1ON FROM M1P WHERE ML1RCF = '')           
ORDER BY ML2OSM ASC) as T 
WHERE 
T.Order__Number in (Select t3.m2on from (SELECT * 
FROM(Select * from m2p 
where m2on = t.Order__Number and m2pn = t.Product__Number 
order by m2seq asc fetch first 2 rows only 
)as t1 order by m2seq asc fetch first row only 
) as t3 where t3.m2stat = 'C') 

編集 - 回答は非常に高速応答のために彼に感謝します!私は外側のテーブルに名前をつけて、サブクエリでas400がキックバックしてカラムを見つけることができないと指定する必要がありました。私はまた、シーケンス番号が降順になるように注文しなければなりませんでした。そうでなければ、例えばシーケンス番号が20だった場合は、10が利用可能であっても最初に表示する必要がありました。私が今使っサブクエリ。M2P T1として実際のクエリの名前に注意してください。

IFNULL((
    SELECT 
     M2STAT 
    FROM 
     M2P as M2P_1 
    WHERE 
     M2ON = T1.M2ON 
     AND M2SEQ < T1.M2SEQ 
    AND M2PN IN (select R1PN FROM R1P WHERE (RTWC = @WC) AND (R1SEQ = T1.M2SEQ)) 
    ORDER BY M2SEQ DESC 
    FETCH FIRST ROW ONLY 
), 'NULL') as PRIOR_M2STAT    
+0

すべてのサブクエリを使用せずに書き込むことはできますか? –

答えて

2

ちょうどあなたの質問を読んで、それは私がRPG READPEのオペコードをエミュレートするために頻繁に行う何かのように見えますが。M2P注文/配列への鍵ですか?もしそうなら、ここに基本的な部分があります。

私はあなたがSQLを使ってキーで前のレコードを取得しようとしていると思いますが、RPGではこれはREADPEのキーにOrder/Seqキーを含むファイル。

ここでは、サブクエリを使用して以前のレコードのステータスフィールドを取得する例を示します。これは、それが最初のシーケンス番号であり、事前の配列が存在しない場合を処理するためIFNULLのサブクエリをラップすること

SELECT 
    M2ON, M2PN, M2OQ, M2STAT, 
    IFNULL((
     SELECT 
      M2STAT 
     FROM 
      M2P as M2P_1 
     WHERE 
      M2P_1.M2ON = M2ON 
      AND M2P_1.M2SEQ < M2SEQ 
     FETCH FIRST ROW ONLY 
    ), '') as PRIOR_M2STAT 
FROM 
    M2P 

注意。

関連する問題