(Gast)
n/a Beiträge
|
AW: Daten per SQL gruppieren
10. Apr 2017, 18:33
Um das SQL auch auf andere Seriennummerntypen anwendbar zu machen, schlage ich vor, die Seriennummer in den konstanten Teil (in den Beispieldaten das F) und den nummerischen Teil, also die aufsteigende Nummer, in der Tabelle / Datenbank zu unterteilen. Das macht die weitere Verarbeitung deutlich einfacher, erfordert aber eine Datenmigration mit allen erforderlichen Nacharbeiten in vorhandenen Routinen.
Das von oben übernommene SQL könnte dann in etwa so aussehen (ungetestet):
SQL-Code:
select
Concat(SerConst,Replicate('0', 8 - Len(SerNr)) + SerNr) As SerNr,
Typ, Status,
WeiteresFeld1, /* ... */ WeiteredFeldX,
Anzahl from
(
select
SerConst,
SerNr,
BisNr,
Typ,
Status,
WeiteresFeld1, /* ... */ WeiteresFeldX,
(BisNr - SerNr) As Anzahl
from
(
select
SerConst,
Min(SerNr) As SerNr,
BisNr,
Typ,
Status,
WeiteresFeld1, /* ... */ WeiteresFeldX
from
(
select
SerConst,
SerNr,
Typ,
Status,
WeiteresFeld1, /* ... */ WeiteresFeldX,
IsNull((select
min(b.SerNr)
from norwegen60 b
where a.SerConst = b.SerConst
and a.SerNr < b.SerNr
and ( a.Status <> b.Status
or a.Typ <> b.Typ
or a.WeiteresFeld1 <> or b.WeiteresFeld1
/* ... */
or a.WeiteresFeldX <> or b.WeiteresFeldX
)
),
(select Concat(SerConst,Replicate('0', 8 - Len(Max(SerNr))) + Max(SerNr)) As SerNr
from norwegen60)
) as BisNr
from norwegen60 a
where SerConst = 'F' and SerNr Between 5323690 and 5323695
/* Parametrisiert: */
/* where SerConst = :ParamSerConst and SerNr Between :ParamStartSerNr and :ParamEndeSerNr */
)
group by SerConst, BisNr, Typ, Status, WeiteresFeld1, /* ... */ WeiteresFeldX
)
)
order by 1, 2, 3, 4, 5 /* , ... NrLetztesFeldImSelect */;
Geändert von nahpets (10. Apr 2017 um 19:03 Uhr)
Grund: Schreibfehler, wie immer :-(
|