Ich verwende Oracle in Hyperion Studio. Ich glaube, es ist Oracle 11, aber ich bin mir nicht sicher, wie ich das überprüfen soll ... das ist alles ziemlich neu für mich, und ich bin sehr, sehr viel Neuling, ich entschuldige mich.Verketten Sie zwei Zeilen in derselben Spalte zu einer Zeile (Oracle); benutze LISTAGG?
In jedem Fall verwende ich eine Abfrage, um eine Liste der Klassen zusammen mit den Namen der Dozenten zurückzugeben.
Es gibt zwei Probleme, die entstehen:
Instructor Name in mehrere Spalten aufgeteilt wird. Ich löste dies einfach mit rekursiven CONCAT in einem Computed Item:
CONCAT (Request.Instructor_Last_Name,CONCAT(', ',Request.Instructor_First_Name))
- Ein Kurs kann mehr als einen Lehrer hat. Ich möchte, dass jeder Kurs nur eine Zeile in den Ergebnissen hat, also dachte ich, ich würde versuchen, alle Instruktoren in einem einzigen verketteten Feld zu zeigen.
Um zu versuchen, das zweite Problem zu lösen, habe ich versucht LISTAGG und CONCAT zusammen in einem Computed Artikel mit:
LISTAGG(CONCAT (Request.Instructor_Last_Name,CONCAT(', ',Request.Instructor_First_Name)), 'and ')
WITHIN GROUP (ORDER BY Request.Instructor_Last_Name DESC) "All Instructors"
Dies gibt den Fehler ORA-00937: not a single-group group function
.
Das brachte mich auf diese Frage: LISTAGG Query "ORA-00937: not a single-group group function" Ich versuchte Variationen der Lösung dort, ohne Erfolg. Hier ist ein Beispiel, das ich versucht:
LISTAGG(CONCAT (Request.Instructor_Last_Name,CONCAT(', ',Request.Instructor_First_Name)), 'and ')
WITHIN GROUP (ORDER BY Request.Instructor_Last_Name DESC) "All Instructors"
FROM Request
GROUP BY *
Dieser den Fehler zurückgibt:
ORA-00936: missing expression
Ich habe auch versucht
ersetzenLISTAGG(CONCAT (Request.Instructor_Last_Name,CONCAT(', ',Request.Instructor_First_Name)), 'and ')
mit
LISTAGG(Request.Instructor_Last_Name || ', ' || Request.Instructor_First_Name,'and ')
basiert auf etwas, das ich gelesen, aber das war nicht Es macht einen Unterschied (ich bin mir nicht einmal sicher, ob das überhaupt funktioniert).
Das hat mich erschöpft. Ich bin an dieser Stelle sicher, dass die Antwort muss mich nur wegen meiner Unerfahrenheit wird eluding, so wird jede Hilfe enorm geschätzt ...
Hier ist eine sehr abgespeckte Version der Abfrage, mit dem Code vkp vorgeschlagen (diese sind Banner-Tabellen, wie manche erkennen kann):
SELECT DISTINCT
AL1.SFRSTCR_TERM_CODE, AL1.SFRSTCR_CRN,
AL3.SPRIDEN_FIRST_NAME, AL3.SPRIDEN_LAST_NAME,
CONCAT ((AL3.SPRIDEN_LAST_NAME),CONCAT(', ',(AL3.SPRIDEN_FIRST_NAME))),
select Student_Registration_CRN,
LISTAGG((Instructor_Last_Name||', '||Instructor_First_Name), 'and '))
WITHIN GROUP (ORDER BY Instructor_Last_Name DESC) "All Instructors"
FROM Request
group by Student_Registration_CRN
FROM SATURN.SFRSTCR AL1, SATURN.SIRASGN AL2, SATURN.SPRIDEN AL3
WHERE (AL1.SFRSTCR_TERM_CODE = AL2.SIRASGN_TERM_CODE (+)
AND AL1.SFRSTCR_CRN = AL2.SIRASGN_CRN (+)
AND AL2.SIRASGN_PIDM = AL3.SPRIDEN_PIDM (+))
AND ((AL3.SPRIDEN_CHANGE_IND IS NULL AND AL1.SFRSTCR_TERM_CODE='201660'))
Dies erzeugt den Fehler:
ORA-00936: missing expression
ich Aliase für einige der Spaltennamen verwendet haben, so habe ich versucht, die vorgeschlagene c Ode ohne Aliase, aber das schien keinen Unterschied zu machen.
Ich habe versucht, Boneist empfohlenen SQL verwenden, um die SQL-Datei direkt importieren, anstatt mit den visuellen Builder und Computed Artikel.Hier ist, was ich zu laufen versucht:
select distinct
al1.sfrstcr_term_code,
al1.sfrstcr_crn,
al3.spriden_first_name,
al3.spriden_last_name,
al3.spriden_last_name||', '||al3.spriden_first_name,
(select sfrstcr_crn,
listagg(spriden_last_name || ', ' || spriden_first_name, 'and ')
within group (order by spriden_last_name desc)
from request req
where sfrstcr_crn = al1.sfrstcr_crn
group by sfrstcr_crn) "All Instructors"
from saturn.sfrstcr al1
left outer join saturn.sirasgn al2 on (al1.sfrstcr_term_code = al2.sirasgn_term_code
and al1.sfrstcr_crn = al2.sirasgn_crn)
left outer join saturn.spriden al3 on (al2.sirasgn_pidm = al3.spriden_pidm(+))
where al3.spriden_change_ind is null
and al1.sfrstcr_term_code = '201660';
Leider ist dies den Fehler zurückgibt:
ORA-00933: SQL command not properly ended
dachte ich, basierend auf einigem Suchen, dass es irgendwie sein könnte, dass die Zitate nicht korrekt waren importieren, so habe ich versucht, etwas noch Grund:
select distinct
al1.sfrstcr_term_code,
al1.sfrstcr_crn,
al3.spriden_first_name,
al3.spriden_last_name
from saturn.sfrstcr al1
left outer join saturn.sirasgn al2 on (al1.sfrstcr_term_code = al2.sirasgn_term_code
and al1.sfrstcr_crn = al2.sirasgn_crn)
left outer join saturn.spriden al3 on (al2.sirasgn_pidm = al3.spriden_pidm(+))
where al3.spriden_change_ind is null;
aber ich immer noch die gleichen Fehler ... ich habe versucht, für die Suche, was es sonst dazu führen könnten, aber nichts hilfreich ... ich bin nicht sicher, was sonst zu t ry an diesem Punkt.
'Gruppe von *'? Was soll das tun? –
Ich habe irgendwo in meiner Suche gelesen, dass Sie nach der ausgewählten Gruppe gruppieren müssen, und ich war mir nicht sicher, was genau ein Computed Item auswählt, also dachte ich, ich würde versuchen, nur nach etwas zu gruppieren ... was nicht schien Arbeit, oops ... –