2016-06-10 11 views
0

Ich versuche, eine Abfrage mit den Headern "a_program, app_col, count, load_fy" zu erhalten. Es wird versucht, "a_program" so einzustellen, dass es nur eine sehr ausgewählte Teilmenge der bestehenden Spalte "current_program_code" ist. "app_col, subject_id und load_yr" sind alle vorhandenen Spalten in der Tabelle "FT_a". Nun, das knifflige Bit, ich möchte nur Antworten von "FT_a", die nicht in der Tabelle "FT_d" existieren. "FT_a" und "FT_d" haben beide eine Spalte "subject_id".Oracle SQL-Abfrage verschachtelt Funktionen mit einem Join auswählen

versucht, das folgende auszuführen.

select a_program, A.app_col,count(distinct A.subject_id),A.load_fy 
from 
(
select A.app_col,A.subject_id, A.load_fy, 

case 
when A.current_program_code in ('234','ABC', 'DDD', 'TTT', 'SSS', 'PPP', 'DDM') then 'POP' 
when A.current_program_code in ('AND', 'YOU', 'ARE', 'IT', 'INT','CAO','PAP') then 'ROM' 
when A.current_program_code in ('ORD') then 'SAG' 
when A.current_program_code in ('TO', 'SPA', 'SAP', 'SLA', 'SIS') then 'FOR' 
when A.current_program_code in ('TXT', 'XLS', 'JAN') then 'FAV' 
when A.current_program_code is null then 'Unknown' 
else A.current_program_code 
end 
as a_program 

from ft_a A 
left join ft_d D 
on A.subject_id=D.subject_id 
where D.subject_id is null 
and A.load_fy='2015' 
) 
group by a_program, A.app_col, A.load_fy; 

Wenn ich diesen Code ausführen, erhalte ich:

Error at Command Line:1 Column:1 
Error report: 
SQL Error: ORA-00904: "A"."LOAD_FY": invalid identifier 
00904. 00000 - "%s: invalid identifier" 

Ich kann nur vorstellen, ich bin irgendwo eine dumme Komma fehlt ... jede mögliche Hilfe?

+0

Sorry, keine Syntaxfehler, so dass es keine fehlenden Kommas . – jarlh

Antwort

1

Schwer zu sagen, wenn Sie andere Probleme haben, aber die erste Sache, die ich bemerke, ist, dass Sie auf die a Alias ​​in der äußeren Abfrage beziehen, aber der a Alias ​​ist nur im Bereich in der inneren Abfrage.

So entfernen Sie einfach das a alias von den äußeren select und group by Klauseln (erste und letzte Zeile der SQL-Anweisung), und versuchen Sie es erneut:

select a_program, app_col,count(distinct subject_id),load_fy 
from 
(
select A.app_col,A.subject_id, A.load_fy, 

case 
when A.current_program_code in ('234','ABC', 'DDD', 'TTT', 'SSS', 'PPP', 'DDM') then 'POP' 
when A.current_program_code in ('AND', 'YOU', 'ARE', 'IT', 'INT','CAO','PAP') then 'ROM' 
when A.current_program_code in ('ORD') then 'SAG' 
when A.current_program_code in ('TO', 'SPA', 'SAP', 'SLA', 'SIS') then 'FOR' 
when A.current_program_code in ('TXT', 'XLS', 'JAN') then 'FAV' 
when A.current_program_code is null then 'Unknown' 
else A.current_program_code 
end 
as a_program 

from ft_a A 
left join ft_d D 
on A.subject_id=D.subject_id 
where D.subject_id is null 
and A.load_fy='2015' 
) 
group by a_program, app_col, load_fy; 
+0

Danke !!!!! Ich habe 2 Stunden lang mit diesem dummen Skript herumgespielt. Du bist unglaublich. – MakoEyedSoldier

Verwandte Themen