Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#22

AW: Select-Resultat in einer Spalte anzeigen

  Alt 13. Jul 2014, 12:07
Ich habe mir gerade mal die Mühe gemacht (weil es ja auch wirklich so schwer ist) und mal einen kleinen Test mit der LIST Funktion gemacht.

Grundlage dafür ist mein schon erwähntes Beispiel:
SQL-Code:
CREATE TABLE DATA
(
  GRP integer NOT NULL,
  TXT varchar(50) NOT NULL
);

commit;

/* Testdaten */
INSERT INTO DATA (GRP, TXT) VALUES ( 1, 'b' );
INSERT INTO DATA (GRP, TXT) VALUES ( 1, 'c' );
INSERT INTO DATA (GRP, TXT) VALUES ( 1, 'a' );

commit;
Nun ein erster simpler Test
SQL-Code:
select
    d.GRP,
    list( d.TXT, ',' )
from
    (
        select
            i.GRP,
            i.TXT
        from
            data i
        order by
            i.TXT
    ) d
group by
    d.GRP
;
und das Ergebnis (heureka) wie erwartet
GRPTXT
1a,b,c
Das war ja schon mal super ... dann können wir ja mal ein paar reale Daten einfließen lassen
SQL-Code:
/* realere Testdaten */
INSERT INTO DATA (GRP, TXT) VALUES ( 2, 'Emulgator' );
INSERT INTO DATA (GRP, TXT) VALUES ( 2, 'Stabilisator' );
INSERT INTO DATA (GRP, TXT) VALUES ( 2, 'Antioxidationsmittel' );

commit;
Und der SELECT liefert das ab
GRPTXT
1a,b,c
2Emulgator,Antioxidationsmittel,Stabilisator
Also entweder sortiert das was nicht richtig oder ... oder die LIST Funktion hat noch selber eine wie auch immer geartete Sortierung implementiert ... was ja einfach zu prüfen ist, wenn wir einfach mal die Werte so reinpusten wie die sind:
SQL-Code:
select
    d.GRP,
    list( d.TXT, ',' )
from
    data d
group by
    d.GRP
;
Das Ergebnis ist überraschenderweise:
GRPTXT
1a,b,c
2Emulgator,Antioxidationsmittel,Stabilisator
und somit völlig identisch mit der vorherigen Anweisung, wo wir die Daten vorab sortiert hatten.

Ein weiterer kleiner Test mit anderen Testdaten
SQL-Code:
/* weitere Testdaten */
INSERT INTO DATA (GRP, TXT) VALUES ( 3, 'b1' );
INSERT INTO DATA (GRP, TXT) VALUES ( 3, 'c' );
INSERT INTO DATA (GRP, TXT) VALUES ( 3, 'a' );

commit;
und wir erhalten egal mit welcher Abfrage dieses Ergebnis
GRPTXT
1a,b,c
2Emulgator,Antioxidationsmittel,Stabilisator
3a,c,b1

Damit steht nun also fest, dass die LIST Funktion die Werte selber intern einer Sortierung unterzieht, die man von aussen nicht beeinflussen kann.

Und ja, von einem langjährigen Programmierer - der Anfängern gerne und teilweise (sprachlich) sehr vehement unter die Nase reibt, dass diese sich doch mal mit den Grundlagen und dem Problem an und für sich auseinander setzen sollen und sie auch bitte keinen fertigen Quellcode erwarten können - hätte ich diese Analyse eigentlich schon erwartet und vor allem kein Gejammer, warum da nicht die eigenen Feldnamen benutzt werden.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat