SQL Server 2005 Один запрос к вычислению двух таблиц - PullRequest
3 голосов
/ 27 июля 2010

Я новичок в SQL Server

У меня есть три таблицы в Больнице базы данных

  1. PatientFiles
  2. Другие услуги
  3. PatientDeposit

Два запроса для отображения моего результата

  • Запрос номер один.Показать 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
    

Это верный результат

    PatientFileID  | TotalOtherServices
        14                194.00
  • Запрос номер два.Отображение 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
    

Это верный результат

    PatientFileID | TotalPatientDeposit
        14               450.00
  • Мне очень надоело смешивать два запроса

    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
    

Это неверный результат

    PatientFileID  | TotalOtherServices | TotalPatientDeposit
         14                  582.00         1350.00

Спасибо, что помогли мне заранее

Ответы [ 2 ]

1 голос
/ 27 июля 2010
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
0 голосов
/ 27 июля 2010

На первый взгляд кажется, что значения в 3 раза больше ожидаемых.
(194 * 3 = 582, 450 * 3 = 1350).

Кроме того, во втором запросе вы не используете 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

Я знаю, что это не ответ, и нужно проверить больше вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...