Zum Inhalt springen

Abfrage von Daten im SQL Server


Luterzia

Empfohlene Beiträge

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'

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...