none
Abfrage, ABC Analyse RRS feed

  • Frage

  • Hallo,

    ich habe eine Tabelle wie hier beschrieben mit Ausnahme der Spalte Kategorie, nun möchte ich diese in einer SQL Abfrage berechnen.

    Hat jemand einen Lösungsansatz, wie ich das per SQL machen kann?

    Gruß
    Kim

     

     

    Donnerstag, 6. Oktober 2011 12:32

Antworten

Alle Antworten

  • Hallo Kim,
    Du brauchst die laufende Summe über den relativen Periodenverbrauch und kannst diese dann entsprechend den drei Kategorien auswerten.
    http://www.insidesql.org/blogs/frankkalis/2004/07/13/laufende-summe-in-t-sql

    Etwas komplexer aber effektiver für große Datenmengen:
    http://explainextended.com/2010/01/22/sql-server-running-totals/

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu

    Donnerstag, 6. Oktober 2011 12:46
  • Hi Christoph,

    erstmal Danke für die Antwort!

    Habe gerade die 1. Lösung probiert. Funktioniert, allerdings nach 1:30min Timeout und gerade mal 512 Datensätze.

    Werde mir morgen mal in Ruhe die 2. Lösung anschauen und melde mich dann wieder.

    Gruß
    Kim

    Donnerstag, 6. Oktober 2011 14:37
  • Die 2. Lösung basiert auf eindeutigen Werten, in diesem Fall auf dem Datum. In meinem Fall habe ich keine eindeutige Spalte.

    Werde es nun über Quellcode im Programm lösen.

    Freitag, 7. Oktober 2011 07:38
  • Hallo Kim,

     ohne Deine Datenstruktur zu kennen, liefert diese Statement bei mir in einer vergleichbaren Tabelle den prozentualen Anteil jedes Artikels am Gesamtumsatz

    1800 Zeilen weniger als eine Sekunde

    select a.Artikelnummer,SUM(a.menge) AS Jahresbedarf,a.preis as Stueckpreis,SUM(a.menge*a.preis)as absolut, (SELECT SUM(b.menge*b.preis )FROM bewegungsdaten b where a.Artikelnummer=b.Artikelnummer)*100/ (SELECT SUM(c.menge*c.preis )FROM bewegungsdaten c)AS relativ FROM bewegungsdaten a group by Artikelnummer,preis ORDER BY relativ DESC

     

    Gruss Uli

    Freitag, 7. Oktober 2011 08:22
  • Hi Uli,

    den prozentualen Anteil habe ich ja schon berechnet, es geht "lediglich" um die Addition der Prozente damit ich die Klassifizierung der Artikel in A, B oder C setzen kann.

    So habe ich es jetzt im Quellcode gemacht. Der Anwender gibt den Zeitraum (dtpVon und dtpBis) ein und kann die Grenzen (numA, numB und numC) setzen. Was im Quellcode so einfach ist, habe ich via SQL nicht geschafft.

    Dim listArtikel = (From x In myDB.GetABCAnalyseAbsatzzahlen(dtpVon.Value, dtpBis.Value) _
                             Select New With {x.ArtikelNr, x.AnzahlStück, x.Kilo, x.Prozent, .Klasse = ""}).ToList
    
                Dim SummeProzent As Decimal = 0
                For Each Eintrag In listArtikel
                    'Klasse setzen
                    SummeProzent = CDec(SummeProzent + Eintrag.Prozent)
                    If SummeProzent < numA.Value Then
                        Eintrag.Klasse = "A"
                    ElseIf SummeProzent > 100 - numC.Value Then
                        Eintrag.Klasse = "C"
                    Else
                        Eintrag.Klasse = "B"
                    End If
                Next
    
    Gruß
    Kim

    Freitag, 7. Oktober 2011 09:06