0

Crystal Reports に渡されたこの SQL がありますが、「PAL」行は返されません。元の Query/400 は非常に単純です。

これは、ICLOCMLM と ICBLDTIR の間で一致する Join です。これらに参加: (Join 1 or Join 2 same issue)

T01.LMLOC1        EQ       T02.IRLOC1   
T01.LMLOC2        EQ       T02.IRLOC2   
T01.LMLOC3        EQ       T02.IRLOC3   

レコードを選択: T01.LMLTPC LIST 'PAL' 'RAK' 並べ替え:

rty A/D  Field          
 10  A   T01.LMLOC1     
 20  A   T01.LMLOC2     
 30  A   T01.LMLOC3

出力ファイルを作成します: BLDPALQ オプション 1 を置き換えます。

次に、BAL ファイルが追加された後にこのファイルが追加され、必要なレコードが提供されますが、この SQL では何らかの理由で PAL レコードが追加されません。RAK のみ。IOW、Query/400、およびその CPYF は必要なことを実行していますが、この SQL は実行していません。

CPYF       FROMFILE(ASTDTA/ICBALMIE) +                 
           TOFILE(ASTCCDTA/ACBALMPK) +               
           MBROPT(*REPLACE) FMTOPT(*MAP *DROP)       
MONMSG CPF0000                                         
                               */                       
CPYF       FROMFILE(TEMPLIB/BLDPALQ) +                   
           TOFILE(ASTCCDTA/ACBALMPK) +               
           MBROPT(*ADD) FMTOPT(*MAP *DROP)           
           MONMSG CPF0000                         

SELECT
        LMLTPC,
        COALESCE(IRLOC1,'') as IRLOC1,
        COALESCE(IRLOC2,'') as IRLOC2,
        COALESCE(IRLOC3,'') as IRLOC3,
        IRPRT#,
        IRQOH#,
        IRWHS#,
        '' as IEPRT#,
        '.00' as IEQOH#,
        '' as IELOC1,
        '' as IELOC2,
        '' as IELOC3,
        '' as IEWHS#
 FROM ASTDTA.ICLOCMLM mlm
 left join ASTDTA.ICBLDTIR tir
        on mlm.LMLOC1 = tir.IRLOC1
        and mlm.LMLOC2 = tir.IRLOC2
        and mlm.LMLOC3 = tir.IRLOC3
where LMLTPC in ('PAL', 'RAK')

UNION ALL

SELECT  
    ' ' as LMLTPC, 
    ' ' as IRLOC1, 
    ' ' as IRLOC2, 
    ' ' as IRLOC3,
    '' as IRPRT#, 
    '.00' as IRQOH#, 
    '' as IRWHS#, 
    IEPRT#, 
    IEQOH#, 
    IELOC1,
    IELOC2, 
    IELOC3,
    IEWHS# 
FROM ASTDTA.ICBALMIE

このクエリを 400 で実行すると奇妙なことに、PAL レコードを取得するので、結合に何かがあるに違いありません。

SELECT ALL
   T01.LMCOM#,
   T01.LMWHS#,
   T01.LMLOC1,
   T01.LMLOC2,
   T01.LMLOC3,
   T01.LMLTPC,
   T01.LMLCT1,
   T01.LMLCT2,
   T01.LMRIDC,
   T01.LMQTM#,
   T01.LMQMX#,
   T01.LMWGHT,
   T01.LMACTF                  
FROM ASTDTA/ICLOC1 T01
WHERE t01.LMLTPC = 'PAL'

私は完全に参加していますが、それでも機能しません:

SELECT
   T01.LMLTPC,
   T02.IRCOM#,
   T02.IRWHS#,
   T02.IRPRT#,
   T02.IRUM,
   T02.IRLOC1,
   T02.IRLOC2,
   T02.IRLOC3,
   T02.IRLOT#,
   T02.IRFL50,
   T02.IREXPD,
   T02.IRQOH#,
   T02.IRQTM#,
   T02.IRQMX#,
   T02.IRLTPC,
   T02.IRQCM#
FROM ASTDTA.ICLOC1 T01,
     ASTDTA.ICBLD1 T02
WHERE T01.LMLOC1 = T02.IRLOC1
   AND T01.LMLOC2 = T02.IRLOC2
   AND T01.LMLOC3 = T02.IRLOC3
ORDER BY T01.LMLOC1 ASC, T01.LMLOC2 ASC, T01.LMLOC3 ASC
4

2 に答える 2

2

必要な行を取得している可能性がありますが、COALESCE でマスクしています。左側から列を選択してみて、それらが期待する行であるかどうかを確認してください。

SELECT
        LMLTPC,
        LMLOC1,
        LMLOC2,
        LMLOC3,
        IRPRT#...
于 2013-08-07T01:22:34.480 に答える
2

ヒント:

RTVQMQRY コマンドを使用して、Query/400 照会から SQL を生成できます。

    RTVQMQRY QMQRY(someqry) +    
             SRCFILE(mylib/qsqlsrc) +
             ALWQRYDFN(*YES)    
于 2013-08-07T01:32:07.077 に答える