Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Abfrage von Daten im SQL Server

Empfohlene Antworten

Veröffentlicht

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'

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

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.

Das ist die Tabellenstruktur

unbena11.jpg

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

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

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.