Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Select-Resultat in einer Spalte anzeigen (https://www.delphipraxis.net/181062-select-resultat-einer-spalte-anzeigen.html)

Perlsau 11. Jul 2014 14:12

Datenbank: Firebird • Version: 2.5 • Zugriff über: IbDac

Select-Resultat in einer Spalte anzeigen
 
In einer Tabelle ZUSATZ verwalte ich Lebensmittel-Zusatzstoffe. Diese Zusatzstoffe gehören teilweise zu mehreren Klassen, die ich in der Tabelle ZUSATZKLASSEN verwalte. Z.B. ist Schwefeldioxyd einerseits ein Antioxidationsmittel, aber auch ein Konservierungsstoff. Diese Relationen verwalte ich in der Tabelle ZUSATZ_KLASSEN: für jede Kombination Zusatzstoff-Zusatzklasse existiert ein Eintrag, für Schwefeldioxyd mit der Id 1 also zwei Einträge.

Besteht nun die Möglichkeit, in einem Firebird-View eine Spalte einzurichten, die alle Einträge eines Select-Ergebnisses enthält, durch Komma getrennt? Genauer: Ich möchte in einem View der Tabelle ZUSATZ eine Spalte haben, in der alle zum jeweiligen Eintrag gehörende Zusatzklassen durch Komma getrennt angezeigt werden. Ich habe hier dieses View:
Code:
CREATE OR ALTER VIEW V_ZUSATZ(
    Z_ID,
    Z_NAME,
    Z_ALT,
    Z_KLASS,
    Z_ENUM,
    Z_NOTIZ,
    Z_BIO,
    Z_GVO,
    Z_MARK)
AS
select
ZUSATZ.ID_ZUSATZ,
ZUSATZ.Z_NAME,
ZUSATZ.ALTNAME,

ZUSATZ.ENUMMER,
ZUSATZ.Z_NOTIZ,
ZUSATZ.BIO,
ZUSATZ.GVO,
ZUSATZ.MARKIERT

from ZUSATZ;
Dazu soll im Feld Z_KLASS das Ergebnis des folgenden Selects (eines weiteren Views) angezeigt werden, und zwar alle gefundenen Einträge durch Komma getrennt:
Code:
select ZK_KLASSE from V_ZUSATZ_KLASSE where ZK_ZUSATZ = Z_ID (bzw. ZUSATZ.ID_ZUSATZ)
Das View V_ZUSATZ_KLASSE enthält neben der ID für den Zusatzstoff die Klasse in Textform:
Code:
CREATE OR ALTER VIEW V_ZUSATZ_KLASSE(
    ZK_ZUSATZ,
    ZK_KLASSE)
AS
select
ZUSATZ_KLASSE.ZUSATZ,
ZUSATZKLASSE.KLASSE

from ZUSATZ_KLASSE

inner join ZUSATZKLASSE on ZUSATZKLASSE.ID_ZUSATZKLASSE = ZUSATZ_KLASSE.KLASSE
 order by ZUSATZ_KLASSE.ZUSATZ, ZUSATZKLASSE.KLASSE;
Wenn ich jetzt von diesem View ein select ZK_KLASSE from V_ZUSATZ_KLASSE where ZK_ZUSATZ = 1 ausführe, dann erhalte ich zwei Einträge:
Antioxidationsmittel
Konservierungsstoff


Diese beiden Einträge sollen also in die Spalte Z_KLASS des Views V_ZUSATZ eingetragen werden, was dann so aussehen sollte:
Antioxidationsmittel, Konservierungsstoff

DeddyH 11. Jul 2014 14:13

AW: Select-Resultat in einer Spalte anzeigen
 
Versuch es mal mit LIST

Perlsau 11. Jul 2014 16:45

AW: Select-Resultat in einer Spalte anzeigen
 
Hi Detlef,

der Hinweis auf LIST war teilweise zielführend: zumindest funktioniert dieser Select-Befehl im IbExpert-SQL-Editor korrekt und zeigt mir drei Zusatzstoff-Klassen hintereinander mit Komma getrennt an:
Code:
select List(ZK_KLASSE,', ') from V_ZUSATZ_KLASSE where ZK_ZUSATZ = 9
Jetzt hab ich – bislang erfolglos – versucht, das in mein View einzubauen:

Code:
CREATE OR ALTER VIEW V_ZUSATZ(
    Z_ID,
    Z_NAME,
    Z_ALT,
    Z_KLASS,
    Z_ENUM,
    Z_NOTIZ,
    Z_BIO,
    Z_GVO,
    Z_MARK)
AS
select
Z.ID_ZUSATZ,
Z.Z_NAME,
Z.ALTNAME,
List(K.ZK_KLASSE,', ') as V_ZUSATZ_KLASSE,
Z.ENUMMER,
Z.Z_NOTIZ,
Z.BIO,
Z.GVO,
Z.MARKIERT

from ZUSATZ Z
inner join V_ZUSATZ_KLASSE K on K.ZK_ZUSATZ = Z.ID_ZUSATZ
group by Z.ID_ZUSATZ;
Dabei erhalte ich diese Fehlermeldung:

SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).

mkinzler 11. Jul 2014 16:52

AW: Select-Resultat in einer Spalte anzeigen
 
SQL-Code:
CREATE OR ALTER VIEW V_ZUSATZ(
    Z_ID,
    Z_NAME,
    Z_ALT,
    Z_KLASS,
    Z_ENUM,
    Z_NOTIZ,
    Z_BIO,
    Z_GVO,
    Z_MARK)
AS
select
    Z.ID_ZUSATZ,
    Z.Z_NAME,
    Z.ALTNAME,
    K.V_ZUSATZ_KLASSE,
    Z.ENUMMER,
    Z.Z_NOTIZ,
    Z.BIO,
    Z.GVO,
    Z.MARKIERT
from
    ZUSATZ Z
        inner join ( 
                    select
                        List(ZK_KLASSE,', ') as V_ZUSATZ_KLASSE
                    from
                        V_ZUSATZ_KLASSE
                    group by
                        ID_ZUSATZ ) k on K.ZK_ZUSATZ = Z.ID_ZUSATZ;

Perlsau 11. Jul 2014 17:25

AW: Select-Resultat in einer Spalte anzeigen
 
Danke, Markus, jetzt bin ich wieder einen Schritt weiter ... :thumb: ... aber leider noch nicht am Ziel. Abgesehen von ein paar Tippfehlern, die ich leicht aufstöbern konnte, bringt deine Version folgende Fehlermeldung:

SQL error code = -206. Column unknown. ID_ZUSATZ. At line 30, column 9.

Das ist der Eintrag nach dem group by und vor der abschließenden Klammer. Nun hab ich mir gedacht, klar, es geht ja um die Tabelle V_ZUSATZ_KLASSE, und die hat keine Spalte mit dem Namen ID_ZUSATZ. Und eigentlich soll das Ganze ja nach der Spalte ZK_ZUSATZ gruppiert sein, also schnell umgeschrieben:
Code:
CREATE OR ALTER VIEW V_ZUSATZ1(
    Z_ID,
    Z_NAME,
    Z_ALT,
    Z_KLASS,
    Z_ENUM,
    Z_NOTIZ,
    Z_BIO,
    Z_GVO,
    Z_MARK)
AS
select
Z.ID_ZUSATZ,
Z.Z_NAME,
Z.ALTNAME,
K.V_ZUSATZ_KLASSE,
Z.ENUMMER,
Z.Z_NOTIZ,
Z.BIO,
Z.GVO,
Z.MARKIERT

from ZUSATZ Z
inner join
   (select
        List(ZK_KLASSE,', ') as V_ZUSATZ_KLASSE
    from
        V_ZUSATZ_KLASSE
    group by
        ZK_ZUSATZ)
        K on K.ZK_ZUSATZ = Z.ID_ZUSATZ;
Das bringt mir folgende Fehlermeldung ein:

SQL error code = -206. Column unknown. K.ZK_ZUSATZ. At line 31, column 16

Das betrifft jetzt also die letzte Zeile. Seltsamerweise existiert die Spalte ZK_ZUSATZ in der Tabelle (dem View) V_ZUSATZ_KLASSE ... Kann es sein, daß die Variable K, die ja die Tabelle V_ZUSATZ_KLASSE repräsentiert, zu diesem Zeitpunkt nur die Spalte ZK_KLASSE kennt?

mkinzler 11. Jul 2014 17:27

AW: Select-Resultat in einer Spalte anzeigen
 
Die Spalte fehlt in der DERIVED TABLE
SQL-Code:
...
K.V_ZUSATZ_KLASSE,
K.ZK_ZUSATZ,
Z.ENUMMER,
Z.Z_NOTIZ,
Z.BIO,
Z.GVO,
Z.MARKIERT

from ZUSATZ Z
inner join
   (select
        ZK_ZUSATZ, List(ZK_KLASSE,', ') as V_ZUSATZ_KLASSE ...

Perlsau 11. Jul 2014 19:29

AW: Select-Resultat in einer Spalte anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Richtig, die Spalte ZK_KLASSE fehlt, das ist der Knackpunkt. Nach einigem Herumprobieren hab ich nun folgende Lösung gefunden:
Code:
CREATE OR ALTER VIEW V_ZUSATZ1(
    Z_ID,
    Z_NAME,
    Z_ALT,
    Z_KLASS,
    Z_ENUM,
    Z_NOTIZ,
    Z_BIO,
    Z_GVO,
    Z_MARK)
AS
select
Z.ID_ZUSATZ,
Z.Z_NAME,
Z.ALTNAME,
K.V_ZUSATZ_KLASSE,
Z.ENUMMER,
Z.Z_NOTIZ,
Z.BIO,
Z.GVO,
Z.MARKIERT

from ZUSATZ Z
inner join
   (select
        List(ZK_KLASSE,', ') as V_ZUSATZ_KLASSE,
        ZK_ZUSATZ as I
    from
        V_ZUSATZ_KLASSE
    group by
        I)
        K on I = Z.ID_ZUSATZ;
Jetzt gibt es nur noch einen kleinen Schönheitsfehler: Die Klassen in der Spalte Z_KLASS sind nicht alphabetisch geordnet. Wo muß ich denn jetzt das Order By ZK_KLASS einfügen?

mkinzler 11. Jul 2014 19:35

AW: Select-Resultat in einer Spalte anzeigen
 
In der DERIVED TABLE

Perlsau 11. Jul 2014 20:37

AW: Select-Resultat in einer Spalte anzeigen
 
Ich glaub, eine sortierte Ausgabe in LIST geht gar nicht:

The ordering of the list values is undefined.

Dejan Vu 12. Jul 2014 07:59

AW: Select-Resultat in einer Spalte anzeigen
 
Schreib dir die Routine doch selbst:
Code:
SET TERM !!;
CREATE PROCEDURE PSLIST(ID INTEGER)
  RETURNS (CONCAT VARCHAR(2000))
AS
DECLARE VARIABLE name VARCHAR(255);
BEGIN
  CONCAT = '';
  FOR SELECT ZK_KLASSE
        FROM V_ZUSATZ_KLASSE
       WHERE ID_ZUSATZ = :ID
       ORDER BY ZK_KLASSE
  INTO :name
  DO BEGIN
    CONCAT = CONCAT || coalesce(name,'');
  END
  SUSPEND;
END!!
SET TERM ;!!
Getippt und nicht getestet.

jobo 12. Jul 2014 11:26

AW: Select-Resultat in einer Spalte anzeigen
 
Zitat:

Zitat von Perlsau (Beitrag 1265288)
Ich glaub, eine sortierte Ausgabe in LIST geht gar nicht:

The ordering of the list values is undefined.

Bei mir geht sowas:
Code:
select list (valuetxt) from (select VALUETXT from TESTGEN_VAL a order by Valuetxt) b
Vermutlich kann man auch noch einen (gemeinsamen) Schlüsselwert der Listvalues reinpacken (innen) und den dann außen ins Groub by aufnehmen und ausgeben bzw. weiterverwenden.

Dejan Vu 12. Jul 2014 12:47

AW: Select-Resultat in einer Spalte anzeigen
 
Also ich habe jetzt auch an mehreren Stellen gelesen, das die Reihenfolge unbestimmt ist. Bei einem ORDER BY wäre es naheliegend, das es funktioniert, aber es wäre auch denkbar, das die Daten bei der Verarbeitung zum LIST nicht immer sequentiell abgearbeitet werden (Parallelbetrieb, Strategiewechsel etc.). Bei kleinen Tabellen dürfte das aber eher nicht der Fall sein.

Anmerkung: Man würde auch annehmen, das Daten in einem SELECT in der Reihenfolge geliefert werden, in der sie eingefügt wurden (wenn sonst keine Delete oder Update passiert ist). Darauf kann man sich aber auch nicht verlassen, weil es hier um Daten*mengen* geht, keine Daten*listen*. Allerdings bildet 'ORDER BY' eine Ordnung auf die Darstellung der Menge als Liste.

jobo 12. Jul 2014 15:01

AW: Select-Resultat in einer Spalte anzeigen
 
Zitat:

Zitat von Dejan Vu (Beitrag 1265308)
Also ich habe jetzt auch an mehreren Stellen gelesen, das die Reihenfolge unbestimmt ist. Bei einem ORDER BY wäre es naheliegend, das es funktioniert, aber es wäre auch denkbar, das die Daten bei der Verarbeitung zum LIST nicht immer sequentiell abgearbeitet werden (Parallelbetrieb, Strategiewechsel etc.).

Mein Beispiel oben ergibt ohne Order By eine andere Reihenfolge. Und zwar die gleiche ungeordnete Folge, die ein Select * ohne Order By ergibt.
Die Tatsache, dass es mit und ohne Order By unterschiedlich ausgegeben wird und das auch noch entsprechend der Bedeutung von Order by, deutet darauf hin, dass es entsprechend implementiert ist.
Doku dazu habe ich auf die Schnelle nicht gefunden.

Sir Rufo 12. Jul 2014 15:23

AW: Select-Resultat in einer Spalte anzeigen
 
Da diese Funktion ja in einem GROUP BY verwendet wird, werden die Einträge wohl so genommen, wie die gerade reinkommen. Gebe ich eine nach den Einträgen sortierte Liste dort rein bekommt man auch ein sortiertes Ergebnis. Dieses kann man aber nicht direkt beeinflussen, sondern eben nur indirekt über diesen Zwischenschritt.

Darum die Aussage, dass die Sortierung unbestimmt ist.

(Müsste man mal ausprobieren)
grptxt
1b
1c
1a
SQL-Code:
  select list( i.txt, ',' )
    from (
             select d.grp, d.txt
               from data d
           order by d.txt ) i
group by i.grp
sollte dann
Code:
a,b,c
ergeben

jobo 12. Jul 2014 16:13

AW: Select-Resultat in einer Spalte anzeigen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1265316)
sollte dann
Code:
a,b,c
ergeben

Das tut es ja, wie ich schrieb. Ein "Group by" sollte an der Sortierung des "List()"- Result nicht mehr viel ändern, da es bereits vor dem Group schon stehen dürfte. "Group by" ist in Deinem Beispiel überflüssig, wird aber halt meistens nötig, wenn man das "List()" nicht ganz auf dem Trockenen einsetzen will.

Perlsau 12. Jul 2014 17:17

AW: Select-Resultat in einer Spalte anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bei mir funktioniert dieses View nicht so, daß die Einträge in der List-Spalte alphabetisch sortiert sind:
Code:
CREATE OR ALTER VIEW V_ZUSATZ1(
    Z_ID,
    Z_NAME,
    Z_ALT,
    Z_KLASS,
    Z_ENUM,
    Z_NOTIZ,
    Z_BIO,
    Z_GVO,
    Z_MARK)
AS
select
Z.ID_ZUSATZ,
Z.Z_NAME,
Z.ALTNAME,
K.V_ZUSATZ_KLASSE,
Z.ENUMMER,
Z.Z_NOTIZ,
Z.BIO,
Z.GVO,
Z.MARKIERT

from ZUSATZ Z
inner join
   (select
        List(ZK_KLASSE,', ') as V_ZUSATZ_KLASSE,
        ZK_ZUSATZ as I
    from
        (select ZK_KLASSE, ZK_ZUSATZ
         from V_ZUSATZ_KLASSE
         order by ZK_KLASSE)
    group by I
    )
        K on I = Z.ID_ZUSATZ
order by Z_NAME;

jobo 12. Jul 2014 19:45

AW: Select-Resultat in einer Spalte anzeigen
 
Zitat:

Zitat von Perlsau (Beitrag 1265321)
Bei mir funktioniert dieses View nicht so, daß die Einträge in der List-Spalte alphabetisch sortiert sind:

Es scheint tatsächlich am Group by zu liegen. So geht's:
Code:
SELECT a.OID, a.ICLASS,
  (select List(iname) as ItemList
    from (select iname, iclass
            from ANITEM i
           where i.iclass = a.ICLASS
           order by iname)) as X
FROM ANORDER a

Perlsau 13. Jul 2014 01:08

AW: Select-Resultat in einer Spalte anzeigen
 
... und jetzt weiß ich natürlich wieder ganz genau, was was ist ... ich gehe mal davon aus, daß das in meinem View nicht geht, denn sonst hätte wohl irgend einer der SQL-Spezialisten nicht immer nur seinen eigenen Code gepostet, der mit meiner Situation augenscheinlich nicht zusammenpaßt ... Oder weshalb sonst verwendet niemand die Tabellen- und Spaltennamen, die ich bereits mehrfach gepostet habe? Ich blicke da nämlich nicht wirklich durch, deshalb frage ich ja hier nach.

Ist aber auch nicht mehr wichtig, ich hab das jetzt clientseitig gelöst ...

Dejan Vu 13. Jul 2014 08:38

AW: Select-Resultat in einer Spalte anzeigen
 
Zitat:

Zitat von Perlsau (Beitrag 1265348)
Oder weshalb sonst verwendet niemand die Tabellen- und Spaltennamen, die ich bereits mehrfach gepostet habe?

Weil es keine Auftragsarbeit ist, die Du bestellt hast, sondern Gefallen, die Dir die Forenteilnehmer tun. Und da gilt: Demütig und dankbar nehmen, was kommt und freundlich bleiben. ;-)

jobo 13. Jul 2014 09:31

AW: Select-Resultat in einer Spalte anzeigen
 
Zitat:

Zitat von Perlsau (Beitrag 1265348)
..Oder weshalb sonst verwendet niemand die Tabellen- und Spaltennamen, die ich bereits mehrfach gepostet habe? Ich blicke da nämlich nicht wirklich durch, deshalb frage ich ja hier nach.

Ist aber auch nicht mehr wichtig, ich hab das jetzt clientseitig gelöst ...

@Perlsau
Du gibst hier Delphi Anfängern gern und eindringliche Ratschläge, sich mit den Grundlagen oder aber auch Besonderheiten Ihres Anliegens auseinanderzusetzen. Wie kommt es zu Deiner Lustlosigkeit, den eigenen Ratschlägen zu folgen?

Weshalb niemand Deine Objektnamen verwendet?
Es ist ganz einfach, ich spreche mal für mich. Meine Unterstützung hier beschränkt sich seit längerem auf den Bereich SQL, weil ich seit einigen Jahren nicht mehr mit Delphi arbeite und es mich zuviel Zeit kostet, valide Hinweise zu geben. Ich bleib also bei meinen Leisten und gebe Tipps und Hinweise zu SQL, die ich mehrheitlich allgemein halte oder auch mal mit einem konkreten Stück Code, einem Doku Link oder was auch immer versehe, um einen möglichen Nutzen für den TE zu bieten. Das ist idR eine Frage von wenigen Minuten Aufwand für mich.
So auch hier, ich habe mich u.a. soweit aus dem Fenster gelehnt, Sir Rufos Präzisierung meines Vorschlags ohne Prüfung zu kommentieren, einfach weil ich mir meiner Sache ziemlich sicher war und eine echte Prüfung scheinbar nicht im richtigen Verhältnis zum Nutzen stand.
Wie sich herausgestellt hat, funktionieren offenbar beide Vorschläge nicht in der Realität.

Jetzt nur mal so als Zwischenergebnis:
So funktioniert ein Forum doch, oder?!

Ich habe dann (nachdem Du das als nicht funktionierend gemeldet hast) auf Basis eigener Tabellen, die bei mir irgendwo in FB rumfliegen, das Problem nachgestellt und Dir eine funktionierende Variante gepostet, handgetestet. Dass richtig sortiert wird, musst bzw. kannst Du glauben, auf Nachfrage hätte ich Dir auch noch so einen schicken Screenshot geliefert.

Wenn ich mir die (Frei-)Zeit nehme, soetwas zu tun, kann ich nur schwer nachvollziehen, wie es zu Deinen Klagen kommt.

Aber weil Du so nett gefragt hast, hier noch eine Erläuterung:
aus
Code:
Select
  <a.felder>
  <b.listenfeld>
from
  <haupttabelle> a
  <Select List() from ListenQuelle .. order by ..> b*
where a.joinkrit = b.joinkrit
wird in meinem Beispiel
Code:
Select
  <a.felder>
  <Select List() from ListenQuelle
  where a.joinkrit = b.joinkrit
  .. order by ..
  > b*
from
  <haupttabelle> a
* Das Statement ist hier symbolisch dargestellt und verkürzt, die Schachtelung ist nicht abgebildet


Ach noch ein Tipp, wenn Du wirklich erwartest, dass ein Helfer Deine Objektnamen nutzt:
Dazu ist es normalerweise (im professionellen Rahmen) üblich, ein möglichst vereinfachtes Code Beispiel zu liefern, mit dem der Fehler reproduzierbar ist.
Für SQL wird das Beispiel in Form eines vollständigen, funtionierenden DML Scripts inkl. Testdaten gepostet (insert statements). Diese Daten kann man als Fragesteller idR mit ein paar Handgriffen aus seinem System quetschen und erlauben es dem Helfer innerhalb von Sekunden, das echte Problem zu bearbeiten, echte Fehlermeldungen zu sehen und möglicherweise auf echte Bugs und eigenartige Phänomene zu stoßen. (statt zu theoretisieren oder abstrahieren, geschweige denn anhand von SQL Fragmenten erstmal SQL Archäologisch tätig zu werden)

Ich hoffe, wir verstehen uns.

Delphianer111 13. Jul 2014 09:50

AW: Select-Resultat in einer Spalte anzeigen
 
Hast du schon mal diese Variante ausprobiert ?

Code:
CREATE OR ALTER VIEW V_ZUSATZ(
    Z_ID,
    Z_NAME,
    Z_ALT,
    Z_KLASS,
    Z_ENUM,
    Z_NOTIZ,
    Z_BIO,
    Z_GVO,
    Z_MARK)
AS
select
Z.ID_ZUSATZ,
Z.Z_NAME,
Z.ALTNAME,
List(K.ZK_KLASSE,', ') as V_ZUSATZ_KLASSE,
(select List(ZK_KLASSE,', ') from (select K.ZK_KLASSE from V_ZUSATZ_KLASSE K where K.ZK_ZUSATZ = Z.ID_ZUSATZ ORDER BY K.ZK_KLASSE)
Z.ENUMMER,
Z.Z_NOTIZ,
Z.BIO,
Z.GVO,
Z.MARKIERT

from ZUSATZ Z
group by Z.ID_ZUSATZ;

Sir Rufo 13. Jul 2014 12:07

AW: Select-Resultat in einer Spalte anzeigen
 
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.

Dejan Vu 13. Jul 2014 12:18

AW: Select-Resultat in einer Spalte anzeigen
 
Hier hatte ich vorgeschlagen, sich die Funktion selbst zu schreiben. Da ich kein FB habe, kann ich das nicht ausprobieren, aber das doch dann fast so, wie der TE es erwartet: Vorgekaut, getestet. Nur verpackt habe ich es nicht. Tut mir leid-

Perlsau 13. Jul 2014 12:45

AW: Select-Resultat in einer Spalte anzeigen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1265363)
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.

Genau diese Analyse habe ich bereits durchgeführt. Das Resultat sieht man im beigefügten Screenshot. Deinen Vorwurf weise ich damit entschieden zurück!

Selbstverständlich versuche ich, SQL zu verstehen – mit mäßigem Erfolg. Daran hat auch das Studieren mehrerer SQL-Bücher nicht allzu viel geändert und meine SQL-Kenntnisse sind weiterhin nicht wirklich werktauglich. Das weiß ich und damit kann ich leben. Im Übrigen habe ich nicht gejammert, sondern festgestellt:

... und jetzt weiß ich natürlich wieder ganz genau, was was ist ... ich gehe mal davon aus, daß das in meinem View nicht geht, denn sonst hätte wohl irgend einer der SQL-Spezialisten nicht immer nur seinen eigenen Code gepostet, der mit meiner Situation augenscheinlich nicht zusammenpaßt ... Oder weshalb sonst verwendet niemand die Tabellen- und Spaltennamen, die ich bereits mehrfach gepostet habe?

Da postete jemand einen Code mit der Behauptung, das funktioniere, was es nicht tat. Natürlich werden List-Resultate sortiert dargestellt, wenn die Einträge in der Quell-Tabelle bereits richtig sortiert eingegeben wurden. Das ist in der Realität aber eher selten der Fall. Diese Behauptung hat mich offenbar geärgert, ohne daß mir das sofort bewußt war, und dieser Ärger ist dann wohl mit in das Posting geflossen, über das sich die Menge nun zu echauffieren beliebt.

Ich und viele andere hier machen das auch meistens so, wenn ich einem TE ein gepostetes Beispiel korrigiere: Ich verwende nicht irgendwelche frei erfundenen Bezeichner, sondern halte mich zur Erhöhung des Verständnisses, aber auch aus eigener Bequemlichkeit (ich muß das Beispiel ja nur kopieren) an das gepostete Beispiel. Natürlich verstehe ich, daß man das nicht macht, wenn man einen TE aufgrund gewisser Vorurteile nicht ausstehen kann. Für dieses Entgegenkommen bedanke ich mich herzlich :thumb:

Mir fällt es zugebenermaßen schwer, die Variablen und Beispiel-Tabellen- und Spalten-Namen in mein Beispiel korrekt zu übertragen. Auch das habe ich ebenfalls bereits offen dargestellt:

Ich blicke da nämlich nicht wirklich durch, deshalb frage ich ja hier nach.

Was ich hier nun erleben darf, macht auf mich den starken Eindruck von Schadenfreude, und zwar von ganz bestimmten Usern, die auf so eine Gelegenheit nur gewartet zu haben scheinen. Dazu kann ich eigentlich nur eines sagen: Wenn's euch Freude macht und die Zufriedenheit erhöht, soll's mir recht sein. Moralische Vorwürfe erübrigen sich dann wohl in Zukunft, denn damit habt ihr die eigene angebliche Moral ad absurdum geführt :stupid:

Wie bereits erwähnt habe ich mein "Problem" anderweitig gelöst. Es ging nur um eine Anzeige der zugeordneten Zusatzklassen. Damit ist dieses Thema für mich erledig.

Im Übrigen halte ich es für korrekt und wichtig, Anfänger, die sich ein Programm "zusammengeklickt" haben und dann fragen, wie sie eine IF-Schleife mit einem Button erstellen können, auf fehlende Grundkenntnisse und die dringende Beseitigung dieses Mißstandes hinzuweisen.

Dejan Vu 13. Jul 2014 13:02

AW: Select-Resultat in einer Spalte anzeigen
 
Zitat:

Zitat von Perlsau (Beitrag 1265367)
...Deinen Vorwurf weise ich damit entschieden zurück!...über das sich die Menge nun zu echauffieren beliebt....wenn man einen TE aufgrund gewisser Vorurteile nicht ausstehen kann. ...macht auf mich den starken Eindruck von Schadenfreude, und zwar von ganz bestimmten Usern, ...damit habt ihr die eigene angebliche Moral ad absurdum geführt

Merkste wat? :mrgreen: Wir sind hier weder in einer Gerichtsverhandlung, noch in einem Dienstleistungsverhältnis, noch im Ring, noch im Persauhasserverein, sondern... in einem Forum. In *dem* Forum. Keiner will Dir was Böses, keiner hat Vorurteile, keiner ist so kindisch, irgendwelche Ressentiments gegen dich zu hegen oder zu schüren. Also, behaupte ich jetzt mal.

:roll:

Echt ein Kindergarten manchmal. Das Leben.

Sir Rufo 13. Jul 2014 13:06

AW: Select-Resultat in einer Spalte anzeigen
 
Zitat:

Zitat von Perlsau (Beitrag 1265367)
Zitat:

Zitat von Sir Rufo (Beitrag 1265363)
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.

Genau diese Analyse habe ich bereits durchgeführt. Das Resultat sieht man im beigefügten Screenshot. Deinen Vorwurf weise ich damit entschieden zurück!

Ähm, es besteht ein (qualitativer) Unterschied zwischen Beobachten und Analyse.

Deine Beobachtung ergab, dass es so (wie in dem Beispiel) nicht geht.
Meine Analyse ergab, dass es egal wie nicht geht.

(Kontext: die LIST Funktion von Firebird)

Perlsau 13. Jul 2014 13:17

AW: Select-Resultat in einer Spalte anzeigen
 
Zitat:

Zitat von Dejan Vu (Beitrag 1265371)
Merkste wat? Wir sind hier weder in einer Gerichtsverhandlung, noch in einem Dienstleistungsverhältnis, noch im Ring, noch im Persauhasserverein, sondern... in einem Forum. In *dem* Forum. Keiner will Dir was Böses, keiner hat Vorurteile, keiner ist so kindisch, irgendwelche Ressentiments gegen dich zu hegen oder zu schüren. Also, behaupte ich jetzt mal.

Diese Behauptung ist unwahr! Du hattest Ende Mai bereits eine offizielle Verwarnung wegen Beleidigungen gegen mich erhalten! Man beleidigt niemanden, gegen den man keine Ressentiments hegt. Deine Scheinheiligkeit kannst du dir also getrost sparen, und das weißt du auch ganz genau :twisted: Selbstverständlich ist mir diese perfide Methode, die eigenen Vorurteile auf die Vorverurteilten zu projizieren, wenn Letztere darauf verstimmt reagieren, bestens bekannt. Also laß gut sein und labe dich an deiner Schadenfreude, sie sei dir gegönnt :lol:

Zitat:

Zitat von Sir Rufo (Beitrag 1265372)
Ähm, es besteht ein (qualitativer) Unterschied zwischen Beobachten und Analyse.
Deine Beobachtung ergab, dass es so (wie in dem Beispiel) nicht geht.
Meine Analyse ergab, dass es egal wie nicht geht.
(Kontext: die LIST Funktion von Firebird)

Du hast doch keine Ahnung, was ich hier alles angestellt habe, um das List-Resultat alphabetisch zu sortieren! Selbstverständlich habe ich weit mehr ausprobiert, als ich hier dokumentiert habe. Egal was ich versucht habe: Das Resultat war stets dasselbe, genau wie in deinem Beispiel. Daher kam ich zu der bereits weiter oben dargestellten Schlußfolgerung: Es geht nicht.

Somit darfst du gerne wieder von deinem Sockel herabsteigen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz