DB2サーバーではかなり大きな照会を実行しています。このクエリでは、20のオプションを持つcase文があります。このケースは、各when節にサブクエリを配置しようとするまで完全に機能します。それから、私にエラーが発生し、どこで発生するのかわからない。DB2選択事例で別の表のselectを含めるには
Select SCDATA.SCCLNT.CCLNT,
(Select SCDATA.SCCLNT.CNAME From SCDATA.SCCLNT
Where SCDATA.SCCLNT.CLTGRP Like '231043' Fetch First
1 Rows Only) As ClientName,
CONCAT(TRIM(SCDATA.SCCLNT.CADD1), SCDATA.SCCLNT.CADD2) As Address1,
CONCAT(TRIM(SCDATA.SCCLNT.CCITY), CONCAT(', ',
CONCAT(TRIM(SCDATA.SCCLNT.CSTATE), CONCAT(' ',
TRIM(SCDATA.SCCLNT.CZIP)))))
As Address2,
SCDATA.SCCLNT.CLTGRP As Group,
CONCAT((Select
VARCHAR_FORMAT(Min(TIMESTAMP_FORMAT(Cast(SCDATA.SCACCT.GPLDAT
As Char(10)), 'YYYYMMDD')), 'MM/DD/YYYY') From SCDATA.SCACCT
Where SCDATA.SCACCT.GPLDAT Between 20170401 and 20170501), CONCAT(' - ',
(Select VARCHAR_FORMAT(Max(TIMESTAMP_FORMAT(Cast(SCDATA.SCACCT.GPLDAT As
Char(10)), 'YYYYMMDD')), 'MM/DD/YYYY') From SCDATA.SCACCT
Where SCDATA.SCACCT.GPLDAT Between 20170401 and 20170501))) As dateRange,
SCDATA.SCACCT.GCLNT,
SCDATA.SCACCT.GPLACE,
SCDATA.SCACCT.GPLDAT,
SCDATA.SCACCT.GACCT# As GACCTnum,
CONCAT(TRIM(SCDATA.SCACCT.GLAST), CONCAT(', ', TRIM(SCDATA.SCACCT.GFIRST))) As
Debtor,
(SCDATA.SCACCT.GPRI + SCDATA.SCACCT.GINT) as Balance,
SCDATA.SCACCT.Gdebt#,
CASE
WHEN GDC20 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC20 FETCH TOP 1 ROWS)
WHEN GDC19 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC19 FETCH TOP 1 ROWS)
WHEN GDC18 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC18 FETCH TOP 1 ROWS)
WHEN GDC17 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC17 FETCH TOP 1 ROWS)
WHEN GDC16 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC16 FETCH TOP 1 ROWS)
WHEN GDC15 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC15 FETCH TOP 1 ROWS)
WHEN GDC14 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC14 FETCH TOP 1 ROWS)
WHEN GDC13 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC13 FETCH TOP 1 ROWS)
WHEN GDC12 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC12 FETCH TOP 1 ROWS)
WHEN GDC11 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC11 FETCH TOP 1 ROWS)
WHEN GDC10 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC10 FETCH TOP 1 ROWS)
WHEN GDC09 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC09 FETCH TOP 1 ROWS)
WHEN GDC08 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC08 FETCH TOP 1 ROWS)
WHEN GDC07 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC07 FETCH TOP 1 ROWS)
WHEN GDC06 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC06 FETCH TOP 1 ROWS)
WHEN GDC05 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC05 FETCH TOP 1 ROWS)
WHEN GDC04 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC04 FETCH TOP 1 ROWS)
WHEN GDC03 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC03 FETCH TOP 1 ROWS)
WHEN GDC02 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC02 FETCH TOP 1 ROWS)
WHEN GDC01 !='' THEN (Select SDDESC from SC0016 where SDCODE=GDC01 FETCH TOP 1 ROWS)
ELSE 'xx'
END as Description
From SCDATA.SCCLNT
inner Join SCDATA.SCACCT On SCDATA.SCACCT.GCLNT = SCDATA.SCCLNT.CCLNT And
SCDATA.SCACCT.GPLDAT Between 20170401 and 20170501
Where SCDATA.SCCLNT.CLTGRP Like '231043'
Group By SCDATA.SCCLNT.CCLNT,
SCDATA.SCCLNT.CLTGRP,
SCDATA.SCCLNT.CNAME,
SCDATA.SCCLNT.CADD1,
SCDATA.SCCLNT.CADD2,
SCDATA.SCCLNT.CCITY,
SCDATA.SCCLNT.CSTATE,
SCDATA.SCCLNT.CZIP,
SCDATA.SCACCT.GFIRST,
SCDATA.SCACCT.GLAST,
SCDATA.SCACCT.GCLNT,
SCDATA.SCACCT.GPLACE,
SCDATA.SCACCT.GPLDAT,
SCDATA.SCACCT.GACCT#,
SCDATA.SCACCT.gpri,
SCDATA.SCACCT.GINT,
SCDATA.SCACCT.GDEBT#,
GDC20,
GDC19,
GDC18,
GDC17,
GDC16,
GDC15,
GDC14,
GDC13,
GDC12,
GDC11,
GDC10,
GDC09,
GDC08,
GDC07,
GDC06,
GDC05,
GDC04,
GDC03,
GDC02,
GDC01
このクエリの背後にある目的は、クエリ結果の表示のための最高ランクの記述コードを取得することですが、プログラムが構築されています説明は時間をかけて追加されるように、私は20から1までカウントダウンする必要があります最も最近使用されたコードを探します。コードは、私が情報を引き出す必要がある別のテーブルに対応する単純な2文字の組み合わせです。
質問は、私がSC0016テーブルから必要とする単一の値を引き出すために、DB2のcase文をどのように再設計できますか?
おかげ