MS-SQL Daten richtig ermitteln, sehr schwer!

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Cheffboss.

    MS-SQL Daten richtig ermitteln, sehr schwer!

    Moin! :)
    Ich habe gerade eine sehr schwierige Aufgabe.
    Ich habe zwei Tabellen eine „tblAnmeldedaten“, in dieser alle Benutzernamen aufgelistet sind.
    Bei der andren habe ich verschiedene Spalte per INNER-JOIN hinzugefügt.
    Als Ergebnis möchte ich nun, von alle Benutzern, die Druckerkosten angezeigt bekommen.

    SQL-Abfrage

    1. Where Benutzername = 'Test''

    Wenn ich in meinen SQL-Befehl nach dem Benutzer ‚Test‘ suche, zeigt er mir immer den Wert 73,00€ an.
    Jetzt weiß ich nicht, wie ich das Problem lösen kann.
    Hilft vielleicht eine Schleife? Oder wie kann ich nun vorgehen?
    Falls ich es nicht gut erklärt habe, sagt mir bescheid.
    Dann versuche ich dies nochmals anders zu erklären!
    Freue mich auf eure Hilfe!
    BIG THX

    SQL-Abfrage

    1. -- Alle Benutzernamen sind hier eingetragen....
    2. SELECT * FROM tblAnmeldedaten
    3. -- Alle Werte in eine Tabelle einfügen...
    4. SELECT Vorname + ' ' + Nachname AS 'Vollständiger Name',
    5. (SELECT SUM(proSeiteKosten * SeitenAnzahl) FROM tblDruckerauftragLogs WHERE wer =(SELECT ID FROM tblAnmeldedaten
    6. Where Benutzername = 'Test')) AS 'Druckkosten', -- BUG!
    7. FORMAT(SUM(Guthaben), 'C') AS 'Surfkosten',
    8. FORMAT((Kosten) + (Guthaben), 'C') AS 'Verdienst',
    9. letzeAufladung
    10. FROM tblBenutzer
    11. FULL JOIN tblDruckerauftragLogs
    12. on tblBenutzer.id = tblDruckerauftragLogs.id
    13. INNER JOIN tblGuthaben
    14. ON tblGuthaben.id = tblBenutzer.ID
    15. group by vorname, nachname,kosten, Guthaben, letzeAufladung


    Visual Basic.NET 8o
    MS-SQL
    8o
    Versuch mal statt Where Benutzername = 'Test' das hier:

    SQL-Abfrage

    1. Where Benutzername = tblBenutzer.Benutzername


    EDIT: Vorausgesetzt der Benutzername steht in tblBenutzer.Benutzername! Aber anscheined nur in tblAnmeldedaten laut deiner Infos. Fakt ist, dass es logischerweise nicht funktioniert, wenn du den Benutzernamen in die Where-Anweisung fest einbaust.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Quellcode

    1. -- Alle Benutzernamen sind hier eingetragen....
    2. SELECT * FROM tblAnmeldedaten
    3. -- Alle Werte in eine Tabelle einfügen...
    4. SELECT Vorname + ' ' + Nachname AS 'Vollständiger Name',SUM(proSeiteKosten * SeitenAnzahl) as Druckkosten
    5. FORMAT(SUM(Guthaben), 'C') AS 'Surfkosten',
    6. FORMAT((Kosten) + (Guthaben), 'C') AS 'Verdienst',
    7. letzeAufladung
    8. FROM tblBenutzer
    9. FULL JOIN tblDruckerauftragLogs
    10. on tblBenutzer.id = tblDruckerauftragLogs.id
    11. INNER JOIN tblGuthaben
    12. ON tblGuthaben.id = tblBenutzer.ID
    13. WHERE Benutzername = 'Test'
    14. group by vorname, nachname,kosten, Guthaben, letzeAufladung


    Ungeprüft, aber ohne Subselect sollte es funktionieren?
    Wo ist denn da die Referenz der beiden Tabellen?

    Zeige doch Mal die Tabellen.

    Ich sehe kein JOIN in deinem Beispiel

    Was soll das alles in einer Tabelle eintragen?
    Ich glaube du hast JOIN nicht verstanden.
    Bist du sicher, dass die Guthaben Id gleich der Anmelde ID ist?

    Edit, Ok, du joinst irgendwas
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    @an alle
    Danke, für eure Nachricht. :)
    Leider könnte ich den Fehler nicht beheben.
    Für einen MSQL-Experte ist dies bestimmt in wenigen Minuten gelöst.
    Ich habe jetzt zwei SQL-Scriptdateien geschrieben.
    SQLDatenbank_anlegen“ die erstellt eine neue Datenbank mit den passenden Tabellen diese gefüllt werden.
    SQLDatenbank_InhaltAusgabe“ dort findet sich der Code für die Ausgabe beziehungsweise dem SELECT Befehl.

    Die Anwendung hat 4 verschiedenen Tabellen mit Inhalt.
    Diese Tabellen werden per JOIN zusammengesetzt.
    Ziel ist es, dass folgende Werte angezeigt werden.
    Vollständiger Name, Druckerkosten, Surfkosten, Verdienst, letzte Aufladung.
    Das folgende Problem ist, dass die Druckkosten, nicht richtig angezeigt werden.
    Ich bekomme in diesem Beispiel nur die 3 Euro von Where Benutzername = 'Test')) AS 'Druckkosten'
    Für alle Spalten...
    Aber jeder Benutzer hat ein anderes Guthaben(Druckerkosten). :!:

    Ich hoffe ich könnte das Problem gut beschreiben.
    Falls nicht, sagt mir Bescheid, dann versuche ich es nochmals.
    Freue mich auf eure Hilfe.
    BIG THX

    SQL Scripts:
    SQLDatenbank_anlegen.sql
    SQLDatenbank_InhaltAusgabe.sql



    Visual Basic.NET 8o
    MS-SQL
    8o
    Ich habe das mal eben getestet und bekomme mit folgender Abfrage das richtige Ergebnis.

    Quellcode

    1. ​SELECT
    2. Vorname + ' ' + Nachname AS 'Vollständiger Name',
    3. SUM(proSeiteKosten * SeitenAnzahl) as Druckkosten,
    4. FORMAT(SUM(Guthaben), 'C') AS 'Surfkosten',
    5. FORMAT((Kosten) + (Guthaben), 'C') AS 'Verdienst',
    6. letzeAufladung
    7. FROM tblBenutzer
    8. LEFT JOIN tblDruckerauftragLogs on tblBenutzer.id = tblDruckerauftragLogs.Wer
    9. LEFT JOIN tblGuthaben ON tblGuthaben.id = tblBenutzer.ID
    10. group by vorname, nachname,kosten, Guthaben, letzeAufladung
    @Mika2828
    Du hast mich gerettet, der Code hat mir sehr geholfen! :)
    Vielen Dank!

    Leider verstehe ich diesen Code noch nicht ganz.
    Warum jetzt mit LEFT JOIN.
    Falls mir das noch jemand bitte erklären kann.
    Sonst alles top! :!:
    Visual Basic.NET 8o
    MS-SQL
    8o
    Inner join erbringt einen Datensatz, zusammengesetzt aus 2 verknüpften Datensätzen aus zwei Tabellen A und B.
    Findet sich bei Inner join für einen A-Datensatz kein verknüpfter B-Datensatz, so wird mit diesen A-Daten kein Ergebnis ausgeliefert. Weil es gibt ja keine A+B - Verknüpfung, sonden nur den A-Teil.
    Bei Left Join hingegen wird in diesem Falle dennoch ein Datensatz erbracht - allerdings sind alle Felder aus Tabelle B Null.