![]() |
Datenbank: FB 1.5 • Zugriff über: egal
Union Select und ORDER BY
Moin,
habe eine Tabelle. Nach 3 Kriterien sollen Daten ermittelt werden. Diese sollen in eine Datenmange, allerdings sortiert. Am besten erkläre ich es nicht so abstrakt. Es geht um Lieferung/Rücknahme. Vom Prinzip her müßte es mit Union gehen, weil es sich wie gesagt um eine Tabelle handelt. Die drei Teile sollen so aussehen (sollen auch in dieser Reihenfolge erscheinen) : 1. Lieferung : sortiert nach Art.Nr. 2.,3. : Rückgabe. Der Unterschied besteht darin, um welche Art.Nr. es sich handelt. Also in 2. z.B. alle DS > 1000 und in 3. die anderen. Rückgaben sind zur Unterscheidung durch ein Flag gekennzeichnet. Nun kommt es mir so vor, als könne man zwar am Ende des Union ein Order By machen, aber nicht für die 3 Teile einzeln. Ist da ein Fehler drin, oder geht das nur so ? |
Re: Union Select und ORDER BY
Ja, ein globales GROUP BY für alle Teile geht nicht. Da mußt du wohl ne SP schreiben oder FB2 verwenden, da kann man PL auch in "normalen" Queries verwenden.
|
Re: Union Select und ORDER BY
Wie SP schreiben ? Was wäre denn da anders ? :shock: Und PL ? Was ist das ? FB2 sollte mittlerweile kein Hindernis mehr sein.
|
Re: Union Select und ORDER BY
Zitat:
Zitat:
Zitat:
|
Re: Union Select und ORDER BY
Hallo Hansa!
Das ließe sich vermutlich mit berechneten Feldern machen. Poste doch mal die Tabellenstruktur und ein paar Beispieldaten. Dann versuche ich gerne mal, sowas zusammenzubasteln. Gruß Onlinekater |
Re: Union Select und ORDER BY
Beispieldaten wird zu kompliziert oder ich müßte sehr einfache konstruieren. Gehe mal hiervon als gewünschtem Ergebnis aus :
Code:
Vielleicht kam auch die Frage nicht präzise genug rüber. Die Überlegung geht dahin, es mit dem UNION zu machen, aber geht die Sortierung (also nacheinander nach den Kriterien aus Bsp.) damit ? Also : sofern zurueck = 0 nur Sortierung nach Nr. interessiert, falls zurueck = 1, dann die zwei in Frage kommenden Nr.-Kreise zusammenhängend auflisten. Siehe oben : Nr. >= 1000 zuerst und dann die mit Nr. < 1000.
Nr. zurueck (0 : Nein, 1 : Ja)
1 0 // nur nach Nr., sofern 0 1001 0 1002 0 1001 1 // Rückgabe Nr. > 1000 1002 1 2 1 // Rückgabe, aber jetzt erst zeigen weil Nr. < 1000 @mkinzler : an SP habe ich bei der Sache hier noch gar nicht gedacht. Wie meinst Du das genau ? Bräuchte einen fetzen SQL-Beispielcode. |
Re: Union Select und ORDER BY
Hi Hansa,
wenn ich dich richtig verstehe, möchtest du nach Artikel-Nr sortieren aber die genannte Reihenfolge der Lieferung/Rücklieferung beibehalten. Dein Problem ist jetzt, dass die Sortierung nach Artikel-Nr über alle mit UNION verbundenen Abfragen die gewünschte Reihenfolge wieder durcheinander würfelt. Eben alles nur nach Artikel-Nr sortiert. Um die Datensätze nach UNIONs + Artikel-Nr sortiert zu erhalten, muß in jede Abfrage eine Konstante eingefügt werden, welche in die ORDER By Klausel mit aufgenommen wird.
SQL-Code:
alex
select 1 as Reihenfolge, ArtikelNr, ... from ..
union select 2 as Reihenfolge, ArtikelNr, ... from .. union select 3 as Reihenfolge, ArtikelNr, ... from .. order by Reihenfolge, ArtikelNr |
Re: Union Select und ORDER BY
SQL-Code:
SELECT 1 typ, nr, ...
FROM tabelle WHERE ds > 1000 AND flag <> 1 UNION SELECT 2 typ, nr, ... FROM tabelle WHERE ds <= 1000 AND flag <> 1 UNION SELECT 3 typ, nr, ... FROM tabelle WHERE flag = 1 ORDER BY typ, nr |
Re: Union Select und ORDER BY
Ab FB2 kann man das auch mit Hilfe von Derived-Queries lösen:
SQL-Code:
select * from ( select * from tabelle where <bed1> union select * from tabelle where <bed2> union select * from tabelle where <bed2>) order by <feld>;
|
Re: Union Select und ORDER BY
Gibts das ? Sind das etwa schon Antworten auf mein letztes Posting von kurz vorher ? :shock: Das wäre echt phänomenal, zumindest bei der Frage. :-D
Ohne es zu testen würde ich sagen : so geht das tatsächlich. Dann noch 2 Antworten, die wohl auf Anhieb gehen. :thumb: Habe beim suchen das hier noch gefunden :
SQL-Code:
Kann mir da noch einer erklären, was das "order by 1" für einen Zweck hat ?
SELECT ename "Name", deptno "Abteilung" FROM emp WHERE deptno = 10
UNION SELECT ename, deptno FROM emp WHERE deptno = 30 ORDER BY 1; Wie, roter Kasten auch noch ? Wißt Ihr, daß ich somit zu einer Nachtschicht verdonnert bin ? Das da wird jetzt noch zuende gebracht. :zwinker: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:28 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 by Thomas Breitkreuz