2017-04-18 90 views
-2

你好,我想從這樣的查詢創建一個表:(排序)如何在DB2中使用case clause列查詢創建表?

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 

我得到無效的符號時,包括我的情況子句列。我知道DB2是強類型的,所以這就是爲什麼我鑄造每個結果值爲varchar我也試圖將整個case子句[cast(case()end as char(10)],並且絕對不能將'cast as'地方如果沒有一定的誤差會彈出肯定的。

如何根據案件條款列上創建此列有何建議?

+0

查詢通常有一個'SELECT'某處它 – mustaccio

+0

請編輯您的答案,包括任何實際的查詢或演示噸真實的例子查詢。他的問題以及關於你的數據的一些信息。另外,請確切的錯誤信息。如果case語句的所有結果都是字符串,就像你給出的例子那樣,那麼不管你是否投了所有東西,這個錯誤都不會發生。 – 2017-04-19 11:33:44

+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