Zu dem 1=1 wurde genug gesagt, aber noch zu dem :
Zitat von
p80286:
SQL-Code:
select 1 from ...
order by 1,2 ...
wobei ich bisher nur für das "order by 1.." als Erklärung gefunden habe, die Zahlen bezögen sich auf das entsprechende Feld in der Select-Anweisung..
Da gibts ganz andere Anwendungsfälle.
SQL-Code:
SELECT 1,A.ID,A.NR AS NR,A.BEZ,A.BEZ2,R.WERT,R.VERGART
FROM ART8 A JOIN ARTRAB8 R ON
A.ID = R.ID_ART WHERE R.ID_KUNDE = 516 UNION
SELECT 2, W.ID,W.NR AS NR,W.BEZ AS BEZ,'',R.WERT,R.VERGART,
FROM ART8 A,WG8 W JOIN WGRAB8 R ON
W.ID = R.ID_WG WHERE R.ID_KUNDE = 516
Aber nu, wat is dat ?
Da kein ORDER BY angegeben ist, sortiert zumindest Firebird nach dem ersten Feld. 1 < 2, also kommt 1 zuerst in die Ergebnismenge und wird auch in Delphi vor dem 2-Krempel angezeigt. In der Praxis siehts nun so aus, dass es sich um Rabatte handelt. Artikel haben Priorität vor der eigenen Warengruppe. Soll das nun umgekehrt rum gemacht werden, dann kann man ohne Änderung an dem obigen
SQL-Statement ORDER BY 2,1 dahinter schreiben. Schon ists umgedreht. Alternativ kann man auch für diesen Fall die 1 und 2 vertauschen.
Bevor die Frage kommt : was soll das '' denn da mittendrin ? UNION SELECT verlangt gleiche Anzahl Felder. Es geht allerdings in dem Fall um 2 unterschiedliche Tabellen. Art.Bez, und Art.Bez2 sind zwei Zeilen auf Bildschirm. Aber die Warengruppen haben nur ein Bez-Feld. Was tun ? Ich gaukle der Warengruppe ein zweites (leeres) Feld vor und fertig.
Der Grund für dieses auf den ersten Blick etwas Undurchsichtige : Man kann zumindest in diesem speziellen Fall keine Feldnamen für ORDER BY angeben (zumindest gültig bis
FB 2.1). Deshalb der Umweg über die Zahlen.