3 Stimmen

SQL Server 2005 Eine Abfrage zur Berechnung von zwei Tabellen

Ich bin ein Anfänger in SQL Server

Ich habe drei Tabellen in der Datenbank hospital

  1. Patientenakten
  2. SonstigeDienstleistungen
  3. Patientendepot

Zwei Abfragen zur Anzeige meines Ergebnisses

  • Anfrage Nummer eins. Anzeige PatientFilesID, TotalOtherServices

    SELECT pf.ID AS PatientFileID, SUM(os.Quantum * os.Price) AS TotalOtherServices
    FROM PatientsFiles pf INNER JOIN OtherServices os ON pf.ID = os.Patient_File_ID 
    WHERE pf.ID = '14'
    GROUP BY pf.ID

Es ist wahres Ergebnis

    PatientFileID  | TotalOtherServices
        14                194.00
  • Anfrage Nr. 2. Anzeige PatientFilesID, TotalPatientDeposit

    SELECT pd.Patient_File_ID AS PatientFileID, SUM(pd.Deposit) AS TotalPatientDeposit
    FROM PatientsDeposits pd
    WHERE pd.Patient_File_ID = '14'
    GROUP BY pd.Patient_File_ID

Es ist wahres Ergebnis

    PatientFileID | TotalPatientDeposit
        14               450.00
  • Meine sehr müde, zwei Abfragen zu mischen

    SELECT pf.ID AS PatientFileID, SUM(os.Quantum * os.Price) AS TotalOtherServices, 
    SUM(pd.Deposit) AS TotalPatientDeposit
    FROM PatientsFiles pf
    INNER JOIN OtherServices os ON pf.ID = os.Patient_File_ID  
    INNER JOIN PatientsDeposits pd ON pf.ID = pd.Patient_File_ID
    WHERE pf.ID = '14'
    GROUP BY pf.ID

Es ist ein falsches Ergebnis

    PatientFileID  | TotalOtherServices | TotalPatientDeposit
         14                  582.00         1350.00

Ich danke Ihnen für Ihre Hilfe im Voraus

1voto

Bill Punkte 4265
Select pf.ID as PatientFileID,
    os.TotalOtherServices,
    pd.TotalDeposit
From PatientFiles pf
    Left Join
 (Select Patient_File_ID as PatientfileID, SUM(os.Quantum * os.Price) AS TotalOtherServices
  From OtherServices Group By Patient_File_ID) os on pf.PatientFileID = os.PatientFileID
    Left Join
 (Select Patient_File_ID AS PatientFileID, SUM(Deposit) AS TotalPatientDeposit
  From PatientsDeposits Group By Patient_File_ID) pd on pf.PatientFileID = pd.PatientFileID

0voto

shahkalpesh Punkte 32505

Auf den ersten Blick sieht es so aus, als wären die Werte dreimal so groß wie erwartet.
(194 * 3 = 582, 450 * 3 = 1350).

Auch in Ihrer 2. Abfrage verwenden Sie keine INNER JOIN .

SELECT pf.ID AS PatientFileID, 
SUM(pd.Deposit) AS TotalPatientDeposit
FROM PatientsFiles pf INNER JOIN PatientsDeposits pd
ON pf.ID = pd.Patient_File_ID
WHERE pd.Patient_File_ID = '14'
GROUP BY pd.Patient_File_ID

Ich weiß, dass dies nicht die Antwort ist und dass es mehr Dinge gibt, die überprüft werden sollten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X