Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 Uhr.
Seite 2 von 3     12 3      

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