Luterzia Geschrieben 16. November 2010 Teilen Geschrieben 16. November 2010 Hallo Ich komme leider nicht weiter mit einer eigendlich einfachen und simplen Abfrage. Habe schon verschiedenes ausprobiert und einiges ergoogelt, aber ich komme nicht darauf was ich falsch gemacht habe. (ab und zu sieht man den Wald vor lauter Bäume nicht mehr;) ) Wenn ich die Abrage starte kommt ein NULL Wert raus, ändere ich R1 zu Lager bekomme ich einen Wert raus, der aber nicht logisch ist. Ich habe 5 Räume, insgesammt 5 Worstations, btw Server und in jeden ist von der Hardware je eine komponente eingebaut. --Welchen Gesamtwert hat die Hardware in Raum 1-- SELECT SUM (a.Preis+b.Preis+c.Preis+d.Preis+e.Preis+f.Preis+g.Preis) AS Gesamtwert FROM tblRaeume i JOIN tblServWork j ON i.RID = j.RaeumeID JOIN tblGrafikkarte a ON j.SWID = a.ServWorkID JOIN tblCPU b ON j.SWID = b.ServWorkID JOIN tblSpeicher c ON j.SWID = c.ServWorkID JOIN tblMainboard d ON j.SWID = d.ServWorkID JOIN tblFestplatten e ON j.SWID = e.ServWorkID JOIN tblLaufwerke f ON j.RaeumeID = f.ServWorkID JOIN tblMonitor g ON i.RID = j.RaeumeID WHERE i.Raeume = 'R1' Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
streffin Geschrieben 18. November 2010 Teilen Geschrieben 18. November 2010 ohne die Tabellen zu kennen kann man da als aussenstehender im Endeffekt nur raten. 1. Versuch : SUM(a.Preis+b.Preis+c.Preis+d.Preis+e.Preis+f.Preis+g .Preis) setz mal als erstes jeden Preis in ein isnull(x.Preis,0) Wenn einer der Preise NULL sein sollte gibt das als Ergebnis NULL, weil NULL + irgendwas = NULL. Gruß Sven Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Luterzia Geschrieben 18. November 2010 Autor Teilen Geschrieben 18. November 2010 Danke, daran hatte ich auch gedacht, aber dadurch das ich keine nullwerte in der tabelle habe ... naja, jetzt hab ich was anderes ausprobiert, aber da kommt auch nicht der gesamtwert raus, wie er eigendlich sein sollte. SELECT (SELECT SUM(tblCPU.Preis) FROM tblCPU WHERE ServWorkID IN (SELECT ServWorkID FROM tblServWork WHERE RaeumeID = 1)) + (SELECT SUM(tblFestplatten.Preis) FROM tblFestplatten WHERE ServWorkID IN (SELECT ServWorkID FROM tblServWork WHERE RaeumeID = 1)) + (SELECT SUM(tblMainboard.Preis) FROM tblMainboard WHERE ServWorkID IN (SELECT ServWorkID FROM tblServWork WHERE RaeumeID = 1)) + (SELECT SUM(tblSpeicher.Preis) FROM tblSpeicher WHERE ServWorkID IN (SELECT ServWorkID FROM tblServWork WHERE RaeumeID = 1)) + (SELECT SUM(tblGrafikkarte.Preis) FROM tblGrafikkarte WHERE ServWorkID IN (SELECT ServWorkID FROM tblServWork WHERE RaeumeID = 1)) + (SELECT SUM(tblLaufwerke.Preis) FROM tblLaufwerke WHERE ServWorkID IN (SELECT ServWorkID FROM tblServWork WHERE RaeumeID = 1)) + (SELECT SUM(tblMonitor.Preis) FROM tblMonitor WHERE RaeumeID IN (SELECT RaeumeID FROM tblRaeume WHERE RaeumeID = 1)) Gesamtwert der Gesamtwert wäre so um die 530 aber raus bekomme ich um die 150000. also wird so wieder alles aus allen räumen zusammen gerechnet. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Luterzia Geschrieben 18. November 2010 Autor Teilen Geschrieben 18. November 2010 Das ist die Tabellenstruktur Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
streffin Geschrieben 18. November 2010 Teilen Geschrieben 18. November 2010 Im Bezug auf das 1. Query, das 2. sieht so grausam aus, das würd ich gleich wieder vergessen Mach doch mal aus deinen Joins LEFT JOINS. Ich könnt mir vorstellen, dass nicht in jedem raum Zwangsläufig ein Monititor steht, normal sitzt man ja nicht vor dem Rack wenn man mit dem Ding spielt. Ansonsten, lass bei deiner Abfrage die Aggregatsfunktion erstmal weg, dann siehst du was du in welchem Join zurück bekommst. (Left Join wär da wichtig, sonst bekommste im Zweifel gar nix zurück). Ich geh davon aus, dass irgendwo keine Grafikkarte oder kein Monitor dran hängt, und dir dass dann durch die Inner Joins das Query zerhaut. Gruß Sven Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Luterzia Geschrieben 18. November 2010 Autor Teilen Geschrieben 18. November 2010 In jeden Raum steht quasi ein PC und ein Monitor .... Tabellen sind alle so gefüllt, das jeder PC je eine Komponente hat. Also jeder PC hat eine Graka, ein Speicher, eine Festplatte, ein Laufwerk, ein Mainbord u.s.w Mit den LEFT JOINS hab ich das auch nicht hinbekommen ... Ich werd wohl Morgen mal n Dozenten fragen ... mal sehen was er dazu sagt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
streffin Geschrieben 18. November 2010 Teilen Geschrieben 18. November 2010 Wie gesagt, lass die Aggregatsfunktion erstmal weg, und kuck dir an, was du an Daten zurück bekommst. Dann hast du ein besseres Bild warum das nicht so tut wie es soll. Und LEFT JOINS tun so weh nicht. Gruß Sven Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Luterzia Geschrieben 19. November 2010 Autor Teilen Geschrieben 19. November 2010 Ich hab des Problems Lösung jetzt gefunden. Zum einen habe ich folgende Abfrage genutz und hatte mich gewundert, warum ich eine so hohe Summe raus hatte, die in den 100.000 bereich war. Aber dazu komme ich gleich noch. Erst mal die Abfrage, die jetzt auch 100%ig geht. --Welchen Gesamtwert hat die Hardware in Raum 1-- SELECT (SELECT SUM(Preis) FROM tblCPU WHERE ServWorkID IN (SELECT tblServWork.SWID FROM tblServWork WHERE tblServWork.RaeumeID = 1 )) + (SELECT SUM(Preis)FROM tblFestplatten WHERE ServWorkID IN (SELECT tblServWork.SWID FROM tblServWork WHERE tblServWork.RaeumeID = 1)) + (SELECT SUM(Preis)FROM tblMainboard WHERE ServWorkID IN (SELECT tblServWork.SWID FROM tblServWork WHERE tblServWork.RaeumeID = 1)) + (SELECT SUM(Preis)FROM tblSpeicher WHERE ServWorkID IN (SELECT tblServWork.SWID FROM tblServWork WHERE tblServWork.RaeumeID = 1)) + (SELECT SUM(Preis)FROM tblGrafikkarte WHERE ServWorkID IN (SELECT tblServWork.SWID FROM tblServWork WHERE tblServWork.RaeumeID = 1)) + (SELECT SUM(Preis)FROM tblLaufwerke WHERE ServWorkID IN (SELECT tblServWork.SWID FROM tblServWork WHERE tblServWork.RaeumeID = 1)) + (SELECT SUM(Preis) FROM tblMonitor WHERE RaeumeID IN (SELECT tblServWork.SWID FROM tblServWork WHERE tblServWork.RaeumeID=1)) Gesamtwert Und sollte das Ergebnis nicht stimmen, sollte man mal schauen, ob nicht zufällig, statt ein Punkt ein Komma genommen wurde (10,99 falsch = 10.99 richtig), beim Füllen der Tabellen :upps Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.