2017-04-18 3 views
-2

こんにちは私はこのようなクエリからテーブルを作成しようとしています:(ソートの)DB2のcase節の列を含むクエリからテーブルを作成する方法は?

create table afiexdb.afiext as(
select a.afiaux, a.aficod, a.aficta, a.afidep, b.mb_nom_reg as AFIDEPDSC, a.afimun, d.mb_nom_ciu as AFIMUNDSC, a.afidirchk, a.afifching, a.afidptnac, c.mb_nom_reg as DPTNACDSC, a.afimunnac, e.mb_nom_ciu as MUNNACDSC, 
       cast(CASE WHEN a.afiestciv = 'S' THEN 'SOLTERO' 
                 WHEN a.afiestciv = 'C' THEN 'CASADO' 
                 WHEN a.afiestciv = 'D' THEN 'DIVORCIADO' 
                 WHEN a.afiestciv = 'V' THEN 'VIUDO' 
                 WHEN a.afiestciv = 'U' THEN 'UNION LIBRE' 
                 END as char(11)) as AFIESTCIV, 
a.afifchmue, a.afifchnac, a.afifchprm, a.afifchret, a.afihom, a.afinro, a.afiprof, a.afiserie, a.afisexo, a.afiults, rtrim(a.cli1ernomb)||' '||rtrim(a.cli2donomb)||' '||rtrim(a.cli1erapel)||' '|| rtrim(a.cli2doapel) as AFINOMBRE, 
rtrim(a.clidirec1)||' '||rtrim(a.clidirec2)||' '||rtrim(a.clidirec3) as AFIDIR, a.cliidentid, f.afitel1, f.afitel2, f.afitel3, 
a.estcod, g.estdsc, h.gracod, h.gradsc, a.grucod, i.grudsc, a.unicod, j.unidsc, 
m.pplcod as PAGCOD, m.ppldsc as PAGDSC, afiedad(a.aficod, a.afihom, cast ('20170405' as char(8))) as EDADAFI, 
ifnull(n.pricot,0) as PRICOT, ifnull(n.ultcot,0) as ULTCOT, n.totcot as TOTCOT, n.anioscot, cast(null as decimal) as RESLAB 
from afiliadbf.afiliado a 
left join lisamb30db.regdep b on b.mb_region = a.afidep 
left join lisamb30db.regdep c on c.mb_region = a.afidptnac 
left join lisamb30db.region d on a.afidep = d.mb_region and a.afimun = d.mb_ciudad 
left join lisamb30db.region e on a.afidptnac = e.mb_region and a.afimunnac = e.mb_ciudad 
left join afiliadbf.afiadinf f on a.aficod = f.aficod and a.afihom = f.afihom 
left join afiliadbf.estado g on a.estcod = g.estcod 
left join afiliadbf.grado h on a.gracod = h.gracod 
left join afiliadbf.grupo i on a.grucod = i.grucod 
left join afiliadbf.unidad j on a.unicod = j.unicod 
left join prsipmdb2.pagunida l on a.unicod = l.pagunidad 
left join afiliadbf.platip m on l.pagcod = m.pplcod 
left join (select a.aficod, a.afihom, MIN(rtrim(a.cotanio)||'-'||case when a.cotmes<10 then '0'||a.cotmes else rtrim(a.cotmes)end cotaniomes) as pricot, 
       MAX(rtrim(a.cotanio)||'-'||case when a.cotmes<10 then '0'||a.cotmes else rtrim(a.cotmes) end cotaniomes) as ultcot, sum(a.cotmon) as totcot, 
        cast(count(a.cotanio)/12 as char(2))||' Años '||cast(count(a.cotanio)-(count(a.cotanio)/12)*12 as char(2))||' meses' as anioscot 
      from afiliadbf.cotiza a 
      group by a.aficod, a.afihom) n on n.aficod = a.aficod and n.afihom = a.afihom 
) with no data 

私はcase節の列が含まれている場合、私は、無効なシンボルを取得します。私はDB2が強く型付けされていることを知っているので、各結果の値をvarcharとしてキャストしました。また、case節全体をキャストしようとしましたが[cast(case()endをchar(10)]としてキャストしようとしましたが、どこかにない場合は、いくつかのエラーは確かにポップアップ表示されます。

にcase節の列に基づいて、この列を作成する方法について何かアドバイスを?

+0

クエリは通常、それのどこかに 'SELECT'を持って – mustaccio

+0

は、あなたの実際のクエリまたはTを示し、実際のクエリの例のいずれかを含むようにあなたの答えを編集してください。彼の問題、およびあなたのデータに関するいくつかの情報が含まれています。また、正確なエラーメッセージをお願いします。あなたが与えた例のように、case文のすべての結果が文字列の場合、すべてをキャストするかどうかにかかわらず、このエラーは発生しません。 –

+0

クエリ全体を更新して配置しました。選択部分は、実行されたときに完璧に動作し、返される行を返します。 –

答えて

0

あなたに「ELSE」を忘れている(このようなあなたのケースを変更しようケース):

CASE 
WHEN a.afiestciv = 'S' THEN 'SOLTERO' 
WHEN a.afiestciv = 'C' THEN 'CASADO' 
WHEN a.afiestciv = 'D' THEN 'DIVORCIADO' 
WHEN a.afiestciv = 'V' THEN 'VIUDO' 
WHEN a.afiestciv = 'U' THEN 'UNION LIBRE' 
ELSE cast(null as char(11)) 
END as AFIESTCIV 
関連する問題