Kode SQL berikut memunculkan kesalahan [duplikat]

    SELECT fp.Physician_Key,
       fp.Month,
       pd.DisplayName,
       hd.ProductName,
       SUM(AmtPaid) AS TotalCost
FROM F_ProgramCost_Fact fp
INNER JOIN D_HEALTHPLANDim hd ON hd.HealthPlan_Key = fp.HealthPlan_Key
INNER JOIN D_PHYSICIANDim pd ON fp.Physician_Key = fp.Physician_Key
INNER JOIN F_MemberPatient_FactLess mpf ON fp.MemberPatientFact_Key = mpf.MemberPatientFact_Key
GROUP BY fp.Physician_Key

Mendapatkan kesalahan ini "Kolom 'F_ProgramCost_Fact.Month' tidak valid dalam daftar pilihan karena tidak terdapat dalam fungsi agregat atau klausa GROUP BY."

Tolong bantu! Terima kasih


person Saba Malik    schedule 18.08.2016    source sumber
comment
Saat Anda SUMming, bagaimana Anda mengharapkan mesin SQL untuk menggantungkan nilai yang berbeda untuk kolom F_ProgramCost_Fact.Month? Lalu bagaimana dengan kolom lainnya? Anda harus menambahkannya ke GROUP BY sehingga Anda akan mendapatkan SUM dengan setiap kombinasi kolom lainnya.   -  person PauloASilva    schedule 18.08.2016


Jawaban (1)


Anda perlu mengelompokkan berdasarkan semua kolom:

select fp.Physician_Key,fp.Month,pd.DisplayName,hd.ProductName,SUM(AmtPaid) as TotalCost
From F_ProgramCost_Fact fp
Inner Join D_HEALTHPLANDim hd
ON hd.HealthPlan_Key = fp.HealthPlan_Key
Inner join D_PHYSICIANDim pd
ON fp.Physician_Key = fp.Physician_Key 
Inner Join F_MemberPatient_FactLess mpf ON fp.MemberPatientFact_Key = mpf.MemberPatientFact_Key
Group By fp.Physician_Key,fp.Month,pd.DisplayName,hd.ProductName
person Mustapha Larhrouch    schedule 18.08.2016
comment
Terima kasih telah membantu saya! - person Saba Malik; 18.08.2016