SQL Server 2005一个查询计算两个表

时间:2010-07-27 04:42:40

标签: sql sql-server-2005

我是SQL Server的初学者

我在数据库医院有三个表

  1. PatientFiles
  2. 其他服务
  3. PatientDeposit
  4. 显示结果的两个查询

    • 查询第一名。显示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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

快速浏览一下,看起来价值是预期值的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

我知道这不是答案&更多应该检查的事情。