AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Daten per SQL gruppieren

Ein Thema von norwegen60 · begonnen am 8. Apr 2017 · letzter Beitrag vom 10. Apr 2017
 
nahpets
(Gast)

n/a Beiträge
 
#21

AW: Daten per SQL gruppieren

  Alt 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 = 'Fand 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 :-(
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 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