Summe aus Datenbankabfrage als Prozent ausgeben

  • VB.NET

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Summe aus Datenbankabfrage als Prozent ausgeben

    Hallo Zusammen,

    ich möchte aus einer Datenbank diverse Zeiten abfragen und diese in einem DGV anzeigen lassen. Das klappt auch ganz gut (ssiehe Bild im Anhang).
    Nun möchte ich aber diese Zeiten prozentual anzeigen lassen. Kann mir einer sagen wie man so was macht?

    Ich habe dazu mal paar Codeschnipsel gefunden, verstehe das aber nicht so ganz.

    SQL-Abfrage

    1. SELECT view1.anzahl, view2.vorkommen, view3.prozent FROM (SELECT count(*) anzahl FROM X) view1, (SELECT count(*) vorkommen FROM X, Y WHERE X.a=Y.a) view2, (SELECT (view2.vorkommen * 100 / view1.anzahl) prozent) view3 WHERE view3.prozent > 0;


    SQL-Abfrage

    1. SELECT view1.anzahl, view2.vorkommen, (view2.vorkommen * 100 / view1.anzahl) prozent FROM (SELECT count(*) anzahl FROM X) view1, (SELECT count(*) vorkommen FROM X, Y WHERE X.a=Y.a) view2;


    Meine Abfrage sieht so aus:

    SQL-Abfrage

    1. select Taetigkeit, Sum(Dauer) from tbl_ergebnis where JahrX = " & Jahr & " and MonatX = " & Monat & " and (Taetigkeit = 'Ungeplante Reparatur' or Taetigkeit = 'Neuanfertigung' or Taetigkeit = 'Geplante Reparatur' or Taetigkeit = 'Anfertigen bzw. Nacharbeiten von Werkz.' or Taetigkeit = 'Ersatz- bzw. Verschleißteil anfertigen' or Taetigkeit = 'Umbau- bzw. Einrichtarbeiten') Group by Taetigkeit"


    Schon mal Danke für jede antwort.
    Bilder
    • bild1.jpg

      46,17 kB, 673×432, 311 mal angesehen
    Willst du nur ein % an die angezeigten Zahlen hängen?

    Dazu kannst du das DGV-CellFormatting-Event nutzen, und in e.Value den Text so angeben, wie du ihn möchtest.

    Evtl. mußt du auch das DGV-Parse-Event bearbeiten, und den Wert so übersetzen, wie er ohne die "Verzierung" sein soll.
    mir würden auch nur die Prozent angeben reichen!
    Kannst ja die Spalte 'Hours' aus dem DataGridview herausnehmen. Dann kannst du aber nichts mehr zufügen oder ändern, nurnoch löschen.

    wie bist du dahin gekommen?
    Das wesentliche ist das typisierte Dataset.
    Da enthält die Spalte 'Percent' eine Expression.

    Man kann sich aus Datenbanken komplette typisierte Datasets, inklusive TableAdapter generieren lassen (und die dann erweitern).

    Mit TableAdaptern kann man derlei Datasets recht komfortabel befüllen. Ich war nurzufaul, jetzt eine DB aufzusetzen, sondern bin nach DatasetOnly vorgegangen.

    Das ganze Theater mitte DB kannste u.U. aus "Datenbank in 10 Minuten" auf Movie-Tuts lernen.
    Drei Sachen fallen mir bei deiner Abfrage auf:
    1. Der Part von „Taetigkeit“ im WHERE-Bereich lässt darauf schließen, dass Du deine Datenbank nicht normalisiert hast.
    2. Es ist aus der Abfrage nicht ersichtlich, von welchem Wert Du welchen Prozentsatz ermitteln möchtest.
    3. Die Spalte „Sum(Dauer)“ sollte einen Alias erhalten. Es ist dann einfacher sie zu referenzieren oder zu prüfen. Besser so „Sum(Dauer) AS Summe_Dauer“ (den Alias kannst Du natürlich frei wählen)
    Also Sorry,

    ich stehe gerade voll auf dem Schlauch. Ihrgend wie blicke ich da gar nicht mehr dran lang.

    Also die Datenbank wurde vor jahren mal so hin geschmiert und wie es halt immer so ist wurde gesagt tragt mal erst eure Daten ein und dann werden wir optimieren. Und was soll ich was ist passiert? Richtig!! NICHTS!

    Dann hat ein Kollege vor ca. 2 Jahren mal angefangen dieses Tool zu schreiben um auswertungen zu fahren. Und nun soll das erweitert werden und der Kollege ist nicht mehr im Unternehmen. Und weil ich Hobby mäßig schon mal was mit VB gemacht habe, habe ich jetzt den schwarzen Peter.

    Also wenn Ihr mir das vielleicht noch ein bischen genauer erklären könntet wäre das voll Super ! :D :P

    M-Arens schrieb:

    ...tragt mal erst eure Daten ein und dann werden wir optimieren...
    ...Dann hat ein Kollege vor ca. 2 Jahren...
    ...und der Kollege ist nicht mehr im Unternehmen...
    ...habe ich jetzt den schwarzen Peter.

    RoFl. sorry, ich hab grad voll den LachFlash.
    Dassis wirklich perfekt!!!
    Also den mit "erst Daten eintragen" - genial!! - kannte ich noch nicht - ouh Mann!



    Jo, im Ernst: Sieht so aus, als täte Gambajo sich auf das Thema Datenmodellierung zubewegen. Bei wie fabelhaft das bei euch läuft, täte ich empfehlen, wir diskutieren gleich das gesamte Datenmodell der DB, kann gut sein, muß man komplett neu machen.
    Und sich dann noch u.U. ein KonvertierungsProgramm ausdenken.

    Was ist das fürne DB? Access?

    Kannst du mal ein typisiertes Dataset davon erstellen (siehe gegebenes Tut), und einen Screenshot posten? Dann haben wir ein richtiges ER-Modell zum Auseinanderpflücken.
    Also ich könnte was damit anfangen.

    Kriegst du kein Ärger, Firmendaten, evtl. sogar PersonenDaten Online zu stellen?

    Wie gesagt: Ein ER-Diagramm täte es auch schon.
    Übrigens die Beziehungs-Ansicht von Access ist auch ein ER-Diagramm. Man muß aber drauf achten, dass eingestellt ist, dass alle Beziehungen angezeigt werden.

    Wie groß ist die DB? Weilich könnt mir denken, ist praktischer, die DB wegzulassen, und nur mit typisiertem Dataset zu arbeiten - den Link zum Konzept hasteja schon.
    Wie groß ist die DB? (frug ich schonmal, und begründete das auch)

    BeispielDaten müssten schon rein. Ich hab total häufig Probleme mit mir eigentümlich erscheinenden UserInterfaces - also peile ohne Erläuterung nicht, wie das bedienen.
    Und ich hab auch keine Lust, 4 Abteilungen, 20 MA, sonstwieviele Stundenzettel und wasweisich anlegen zu müssen, um das Tool überhaupt mal zum Laufen zu kriegen.

    Wassis mittm ER-Diagramm?
    Das habe ich doch schon!

    Also im ersten beitrag findest du ein Bild, dort sieht man Stunden die einer Tätigkeit zugeordnet sind.
    Nun möchte ich, das dortige Ergebnis in Prozent umrechnen. Also die Summe aller Stunden dort sind 100% und dann darauf basierend wieviel % macht jede einzelne Tätigkeit aus.

    Ich habe in ein paar Codeschnipseln gesehen was man das wohl mit verschachtelungen machen kann. Aber verstehe nicht wie man das genau macht.

    Ist das so verständlich?

    M-Arens schrieb:

    Habe gerade gesehen, es wurden keine Beziehungen erstellt.
    Da mussichmich glaub nicht zu äußern ;)

    Das Projekt findest du hier !
    Von sone Site, wo ich erst Popups wegklicken muß, lad ich nix runter - werweiß was fürne Logik hinter dem Popup-Button steckt. Ist das Projekt zu fett, um hier gezippt angehängt zu werden?

    Die DB ist 13 MB Groß
    Das ist so klein, da braucht man keine DB, es sei denn, man benötigt Multi-User-Zugriff.

    Ich werd aber langsam unwillig, dass du zum ER-Diagramm nix sagst, also Screenshot entweder vonne Beziehungsansicht oder vom typisierten Dataset. - Bist du überhaupt an einer Datenmodellierung interessiert?
    Sorry,

    - wie kann ich so ein ER-Diagramm erstellen?
    - Ja, das Projekt ist gezippt knapp über ein MB. Wo soll ich es hochladen?
    - Für die Datenbank wird ein Multi-User-Zugriff benötigt.
    - Einen Screenshot von der Beziehungsansicht habe ich doch schon Online gestellt.

    M-Arens schrieb:

    - wie kann ich so ein ER-Diagramm erstellen?
    Sowohl die Access-Beziehungsansicht ist ein ER-Diagramm, als auch die Designer-Ansicht eines typisierten Datasets.
    Auch wenn keine Beziehungen da sind, enthält die Beziehungsansicht doch alle Tabellen und Tabellenspalten, oder?

    - Ja, das Projekt ist gezippt knapp über ein MB. Wo soll ich es hochladen?
    Unterm Eingabeformular dieses Forums, Reiter "DateiAnhänge". Sowohl Bilder als auch Zips kann man anhängen

    - Für die Datenbank wird ein Multi-User-Zugriff benötigt.
    Pech

    - Einen Screenshot von der Beziehungsansicht habe ich doch schon Online gestellt.
    Ja, aber das kannichnich sehen oder downloaden, weilich Popups nicht anrühre, auch nicht zum wegklicken.

    M-Arens schrieb:


    Nun möchte ich, das dortige Ergebnis in Prozent umrechnen. Also die Summe aller Stunden dort sind 100% und dann darauf basierend wieviel % macht jede einzelne Tätigkeit aus.


    Na geht doch. Das hast Du oben nicht geschrieben. Da eine Prozentangabe immer ein Verhältnis darstellt, sollte man schon wissen/angeben, was man ins Verhältnis setzen möchte. Daher auch mein Link zur Prozentrechnung oben.

    So etwas wirst Du über ein Subselect (also ein Select in einem Select, einfach mal danach googeln) machen müssen. Um das berechnen zu können, brauchst Du die Anzahl der Zeilen (ist schon in dem Beispiel von dir drin (Count(*)) und die Summe aller Einträge der Spalte Dauer (da bist Du ja schon auf dem richtigen Weg). Wenn Du die beiden Werte hast, kannst Du auch die altbekannte Formel der Prozentrechnung anwenden.