![]() |
Datenbank: FB • Version: 2 • Zugriff über: IBDAC
"Case" "Order By Nulls First" und Substring -> falsche Sortierung
Hallo,
ich habe hier einen merkwürdigen Fall. Erst mal der Hintergrund. Ich will einen Report erstellen, sortiert nach dem Quartal. Das Feld hat folgendes Format QJJJJ (Q=Quartal, J=vierstelliges Jahr). Also z.B. 42019 12020 Und nun kommts. Es gibt auch Dummy-Datensätze, da steht nur ein "I" drin. Ändern kann ich das nicht, ich muss damit leben. Diese I's will ich ganz oben haben. Ich habe dann überlegt. SQL1: Select Feld From Tabelle Order By substring(1 from 2 for 4)||substring(1 from 1 for 1) Jetzt steht das I ganz unten, die Quartale sind aber korrekt eingeordnet. SQL2: Es gibt ja Nulls First, also Select case Feld when "I" then NULL else Feld end From Tabelle Order By substring(1 from 2 for 4)||substring(1 from 1 for 1) Nulls First Klappt nicht, die Null-Werte stehen ganz unten Meine Notlösung SQL3: Select * From ( Select case Feld when "I" then NULL else Feld as SuchFeld end From Tabelle Order By substring(1 from 2 for 4)||substring(1 from 1 for 1) ) Order By SuchFeld Nulls First Nicht schön, aber warum klappt SQL2 nicht? Laut Doku liefert substring(NULL) NULL zurück und NULL||NULL ist auch NULL. Das ist auch tatsächlich so. SQL3 reicht ja erst mal, aber SQL2 gefällt mir besser. |
AW: "Case" "Order By Nulls First" und Substring -> falsche Sortierung
Wieso konkatenierst Du den gesamten ORDER BY Ausdruck?
Mach doch order by für einzelne Substrings und nutze asc, desc. |
AW: "Case" "Order By Nulls First" und Substring -> falsche Sortierung
ich baue mir dazu immer "Sortierfelder".
hier mit deinem Ansatz mit NULLS First
Code:
select
IIF(TAB2.QUARTAL='I', null, substring(TAB2.QUARTAL from 2 for 4)||substring(TAB2.QUARTAL from 1 for 1)) SortFeld, TAB2.QUARTAL from TAB2 order by SortFeld nulls first oder mit voranstellen eines Präfixes
Code:
oder mit separaten Sortierfeldern
select
IIF(TAB2.QUARTAL='I', 1, 2) || substring(TAB2.QUARTAL from 2 for 4)||substring(TAB2.QUARTAL from 1 for 1) SortFeld, TAB2.QUARTAL from TAB2 order by SortFeld
Code:
select IIF(TAB2.QUARTAL='I', 0, 1) SortFeld1, substring(TAB2.QUARTAL from 2 for 4)||substring(TAB2.QUARTAL from 1 for 1) SortFeld2, TAB2.QUARTAL from TAB2 order by SortFeld1, SortFeld2 |
AW: "Case" "Order By Nulls First" und Substring -> falsche Sortierung
Hallo,
danke Mach doch order by für einzelne Substrings und nutze asc, desc. Damit wird trotzdem das "I" falsch einsortiert. IIF Das gibt es leider erst ab FB2.1. Halt: Gibt es ab FB2.0! Und damit klappt das wie Schnürchen. Vielen Dank an alle (beiden). |
AW: "Case" "Order By Nulls First" und Substring -> falsche Sortierung
Nur so aus Neugier, ist das Sortfeld jetzt nötig oder kann man das Iif auch nur im Order By verwenden? In Oracle hätte ich nämlich sowas versucht (Decode ist sowas wie IIf):
SQL-Code:
Alternativ ginge vielleicht auch ein Replace, wo I durch 0 ersetzt wird, in deinem ursprünglichen SQL1:
Order By Substr(Feld,2,4), -- die Jahre
Decode(Substr(Feld,1,1),'I',0,1)
SQL-Code:
Wenn es in FB ein Replace gibt.
--
Order By substring(1 from 2 for 4)||Replace(substring(1 from 1 for 1),'I','0') |
AW: "Case" "Order By Nulls First" und Substring -> falsche Sortierung
Ich würde ein select ... order by case() verwenden.
![]()
Code:
...
order by when feld case '1' then '00000' else <die hier vorgeschlagenen Lösungen, damit du JJJJQ erhältst> |
AW: "Case" "Order By Nulls First" und Substring -> falsche Sortierung
Hallo,
ich habe das IIF genommen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 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