2017-09-18 2 views
0

Ich muss die folgenden Spalten in einer Tabelle aktualisieren. Männer, Frauen, Säuglinge und Kinder mit SQL-Verfahren.aus dieser Spalte paxtype, die f, i, m, c.Which ist weiblich, Säuglinge, Männer und Kinder respectively.but bin nicht in der Lage Fehler ORA-00907: fehlende rechte KlammerOracle SQL-Prozedur Aktualisierungstabelle

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; 

)

+0

Ich nehme an, Sie brauchen, um loszuwerden, '(count (b.PAXTYPE))', neben '(case' "auf der 3. Reihe". –

+0

das getan haben, aber das gleiche Problem –

+0

Sie wollen um 4 Spalten zu aktualisieren, aber 3 Spalte auszuwählen, muss auch die Fallstatistik vorher sein, und das Ende der Gruppe, da es Semikolon gibt, es ist nicht dort –

Antwort

0

Es sieht aus wie Sie eine Gesamtzahl von jeder Art wollen, nicht wahr? Ich denke, das ist was du machen willst.

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); 
+0

danke @kfinity dieser hat gut funktioniert –

Verwandte Themen