oracle SQL过程更新表

时间:2017-09-18 12:10:11

标签: oracle

我需要更新表格中的以下列。男性,女性,婴儿和儿童使用SQL程序。从这个列paxtype有f,i,m,c.which分别是女性,婴儿,男性和儿童。但是我不能错误ORA-00907:缺少右括号

update xxxx a set (a.INFANTS,a.MALES,a.CHILDREN,a.FEMALES)=
(SELECT b.PAXTYPE, COUNT (b.PAXTYPE) FROM  xxxx b
(case ( count (b.PAXTYPE))
when  ( count (b.PAXTYPE))='M'then 'a.males'
when ( count (b.PAXTYPE))='F' then 'a.females'
when ( count (b.PAXTYPE))='I' then 'a.infants'
when ( count (b.PAXTYPE))='C' then 'a.children'
END)
     WHERE     a.date_key = TO_CHAR (b.FLIGHTDATE, 'RRRRMMDD')
           AND a.FLTNUM_KEY = TRIM (SUBSTR (b.flightnumber, 3))
           AND a.origin = b.frm
           AND a.destination = b.too
           --and a.date_key=20170801
           --and fightnumber = '100'
           AND TRIM (a.cancelled) IS NULL
 -- and rownum = 1 
  GROUP BY b.PAXTYPE;

1 个答案:

答案 0 :(得分:0)

看起来你想要每种类型的总数,对吗?我想这就是你想要做的。

update xxxx a set (a.INFANTS,a.MALES,a.CHILDREN,a.FEMALES)=
(SELECT 
    sum(case when b.PAXTYPE = 'I' then 1 else 0 end) as infants_count,
    sum(case when b.PAXTYPE = 'M' then 1 else 0 end) as males_count,
    sum(case when b.PAXTYPE = 'C' then 1 else 0 end) as children_count,
    sum(case when b.PAXTYPE = 'F' then 1 else 0 end) as females_count
FROM  xxxx b
     WHERE     a.date_key = TO_CHAR (b.FLIGHTDATE, 'RRRRMMDD')
           AND a.FLTNUM_KEY = TRIM (SUBSTR (b.flightnumber, 3))
           AND a.origin = b.frm
           AND a.destination = b.too
           --and a.date_key=20170801
           --and fightnumber = '100'
           AND TRIM (a.cancelled) IS NULL
 -- and rownum = 1 
  GROUP BY b.PAXTYPE);