AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Select-Resultat in einer Spalte anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

Select-Resultat in einer Spalte anzeigen

Ein Thema von Perlsau · begonnen am 11. Jul 2014 · letzter Beitrag vom 13. Jul 2014
Antwort Antwort
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#1

AW: Select-Resultat in einer Spalte anzeigen

  Alt 12. Jul 2014, 16:13
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: Select-Resultat in einer Spalte anzeigen

  Alt 12. Jul 2014, 17:17
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;
Angehängte Grafiken
Dateityp: jpg FirebirdListViewSQL1.jpg (203,2 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: Select-Resultat in einer Spalte anzeigen

  Alt 12. Jul 2014, 19:45
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
Gruß, Jo
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: Select-Resultat in einer Spalte anzeigen

  Alt 13. Jul 2014, 01:08
... 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 ...
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#5

AW: Select-Resultat in einer Spalte anzeigen

  Alt 13. Jul 2014, 08:38
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.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Select-Resultat in einer Spalte anzeigen

  Alt 13. Jul 2014, 09:31
..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.
Gruß, Jo
  Mit Zitat antworten Zitat
Delphianer111

Registriert seit: 23. Nov 2007
10 Beiträge
 
Delphi XE5 Professional
 
#7

AW: Select-Resultat in einer Spalte anzeigen

  Alt 13. Jul 2014, 09:50
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;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz