Ich habe Schwierigkeiten, diese Abfrage zu erhalten, um die korrekten Daten anzuzeigen.Beitreten wird nicht richtig gefiltert
SELECT a.ReportDate
,a.ClientName
,count(a.ADUsername) AS UserCount
,sum(b.ShareData + b.UserData) AS DataUsage
,sum(d.UsedSpace) AS SQLUsage
FROM TableA AS a
JOIN TableB AS b
ON a.ClientName = b.ClientName AND a.ReportDate = b.ReportDate
JOIN TableC AS c
ON a.ClientName = c.ClientName AND b.ClientName = c.ClientName
JOIN TableD AS d
ON c.SQLInstance = d.ServerInstance AND a.ReportDate = d.ReportDate
WHERE a.ClientName = @client AND a.ReportDate = @date
GROUP BY a.ReportDate,a.ClientName
Die Spalten werden angezeigt, aber die Daten darin sind falsch. Insbesondere die Spalte UserCount, DataUsage und SQLUsage enthält wesentlich größere Zahlen. Um zu wiederholen, was passiert:
TableA enthält eine Liste von Namen und ich brauche eine Zählung dieser Namen für ein bestimmtes Datum.
TabelleB enthält 2 Spalten mit numerischen Daten, die mit demselben Kundennamen und demselben Datum wie in TabelleA übereinstimmen müssen.
TableC sind Informationsdaten für jeden Clientnamen in TabelleA und Tabelle B.
TableD enthält mehr Spalten mit numerischen Daten, die mit dem Instanznamen aus TableC übereinstimmen müssen und mit dem Clientnamen aus TableA und TableB sowie dem Berichtsdatum übereinstimmen.
Jede Hilfe wäre willkommen.
EDIT: Hier sind die Ergebnisse dieser Abfrage:
ReportDate | ClientName | UserCount | DataUsage | SqlUsage
03/09/2017 | Client | 175 | 125531.00 | 168816.20
Wenn ich trete auf Tabelle A und B, erhalte ich die richtigen Daten.
SELECT a.ReportDate,a.ClientName
,count(a.ADUsername) AS UserCount
,sum(b.ShareData + b.UserData) AS DataUsage
FROM TableAs AS a
LEFT JOIN TableB AS b
ON a.ClientName = b.ClientName
WHERE a.ClientName = @client AND a.ReportDate = @date
GROUP BY a.ReportDate,a.ClientName
Returns:
ReportDate | ClientName | UserCount | DataUsage
03/09/2017 | Client | 7 | 5021.24
Dann für SQLUsage die Summe tun
SELECT sum(UsedSpace)
FROM TableD
WHERE ServerInstance = @instance AND ReportDate = @date
Gibt mir 24116.60
All diese Informationen korrekt sind.
Auch wenn es nicht genau richtig ist, @ Psis Antwort ist sicherlich auf dem richtigen Weg. Es ist unwahrscheinlich, dass Sie eine bessere Lösung erhalten, wenn Sie einige Beispieldaten bereitstellen, die das Problem veranschaulichen. –