-
SQL Listagg systemfehler
Moin zusammen
mache ich ein
PHP-Code:
select F1, F2,
listagg(digits(tt) concat '.' concat
digits(mm) concat '.' concat
digits(jj) , ', ')
from datei
group by f1, f2
bekomme ich das gewünschte Ergebnis.
in einem komplexen Statement
PHP-Code:
Select a1, b1, c1,
min((select listagg(digits(tt) concat '.' concat
digits(mm) concat '.' concat
digits(jj) , ', ')
from Datei
where f1=a1 and f2=a2 group by f1, f2))
from ... (3 Dateien)
where ...(einfache Feld=Feld verknüpfung und Feld = Wert Satzauswahl)
group by (alle Felder des select
order by ....
bekomme ich einen SQL Systemfehler
auch wenn ich das min( vor dem listagg weglasse und den select in den unteren Group packe, bekomme ich einen Systemfehler
V7R5
Sql kaputt?
anders lösen?
Idee?
Danke!
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Ergänzung:
Lasse ich im Listagg den Group by weg, läuft das Statement aber die Listagg Funktion geht nicht (nur ein Datum).
Auch die Umstellung von
min((select listagg(digits(tt) concat '.' concat
digits(mm) concat '.' concat
digits(jj) , ', ')
from Datei
where f1=a1 and f2=a2 group by f1, f2))
auf
min((select listagg(digits(tt) concat '.' concat
digits(mm) concat '.' concat
digits(jj) , ', ') within group( order by f1, f2)
from Datei
where f1=a1 and f2=a2 ))
läuft, bringt aber nur einen Satz mit einem Datum anstatt einen Satz mit 3 oder 4 Datum
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Du machst ja ein Aggregat über ein Aggregat. Das das nicht klappt ist klar.
Was klappen könnte wäre ein
select min(myagg) from (
select f1, f2, list_agg() as myagg
from mytable
group by f1, f2
)
Within Group dient nur der Sortierung innerhalb des List_Agg, da die Quelldaten unsortiert sein können.
Und wenn du kein Group by hast, kann list_agg auch nichts aggregieren.
Ansonsen kann list_agg auch einen CLOB generieren, der u.U. nicht aggregierbar ist, z.B. mit Min.
In diesem Fall kannst du ggf. per substring(list_agg(..) from 1 for 10000) arbeiten.
-
select min(myagg) from (
select f1, f2, list_agg() as myagg
from mytable
group by f1, f2
)
das hatte ich auch, aber ich brauche eine Verknüpfung --> where f1=a1 and f2=a2
In deiner Version kennt er aber a1, a2 nicht
Anstatt des min( könnte ich sen select ja in den group mit hinein nehmen (hatte ich versucht)
Aber das knallt auch
noch ne idee?
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Welcher SQL-Systemfehler?
-
Mir erschließt sich die Logik für dein Min(List_agg(FX)) nicht,
Durch List_agg(fx) within group(order by fx) steht der kleinste Wert immer am Anfang der Liste.
Ein min(list_agg(fx)) wäre nur sinnvoll, wenn nicht nach f1+f2 gruppiert wird.
-
Wenn ich da kein Min oder Max mache, bekomme ich den Fehler,
Spalte *N oder Ausdruck in select Liste nicht gültig
Da das Statement unten ja einen Group auf alle Felder des select's hat.
group by Myagg geht nicht,
Group by listagg(... bricht ab
@Pikachu
SQL0901 Systemfeler mit CPF 4204 Interner Fehler im Abfrageprozessor
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Wo kommen hier f1 und f2 her?
 Zitat von Robi
in einem komplexen Statement
PHP-Code:
Select a1, b1, c1,
min((select listagg(digits(tt) concat '.' concat
digits(mm) concat '.' concat
digits(jj) , ', ')
from Datei
where f1=a1 and f2=a2 group by f1, f2))
from ... (3 Dateien)
where ...(einfache Feld=Feld verknüpfung und Feld = Wert Satzauswahl)
group by (alle Felder des select
order by ....
bekomme ich einen SQL Systemfehler
-
aus Datei
also der Datei, auf die das listagg läuft.
a1 und a2 aus einer der anderen 4 Dateien die selektiert werden
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Mist,
jetzt mache ich zu begin ein
With abcde as (select a1, a2, listagg(...) as PE
und danach den o.g. select , selektiere PE, verknüpfe mit abcde und groupe zusätzlich PE
und bekomme einen SQL-Systemfehler.
Wobei der 1. select, mit dem listagg(..., alleine fehlerfrei läuft.
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
SQL erzeugt keine temporären Tabellen, also Ergebniss werden immmer bei Bedarf berechnet.
Du musst da dann leider wohl ein Script erstellen:
create newtable as (
select a, b, list_agg() as listerg
from mytable
group by a, b
) with data
Dann kannst du mit dem Ergebnis
select a, b, min(listerg)
from newTable
group by a, b
arbeiten.
-
Ich werde aus dem LISTAGG nicht schlau!
Hast Du wirklich Tag, Monat, Jahr in 3 Zeilen oder alle in der gleichen Zeile?
Wenn zweiteres der Fall wäre, ist der LISTAGG völlig überflüssig, d.h. also Min(Digits(TT) concat '.' concat Digits(MM) concat '.' concat Digits(YY) ist völlig ausreichend.
Willst Du wirklich das Minimum von einem alphanumerischen Datum im Format Tag.Monat.Jahr?
Similar Threads
-
By harkne in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 28-08-24, 14:04
-
By wti in forum NEWSboard Programmierung
Antworten: 12
Letzter Beitrag: 12-04-22, 11:22
-
By mk in forum IBM i Hauptforum
Antworten: 16
Letzter Beitrag: 11-08-21, 08:40
-
By TheDevil in forum IBM i Hauptforum
Antworten: 16
Letzter Beitrag: 07-11-19, 12:52
-
By mahones in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 06-07-17, 16:47
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks