Sql-Server

兩個聚合子查詢不會執行

  • May 31, 2019

我在下面遇到問題,我需要對相關子查詢中的兩列進行平均,但我無法讓它工作,我如何讓兩個聚合子查詢執行然後通過外部查詢?我什至不確定我是否走在正確的道路上,所以任何指導表示讚賞。

問題:使用相關查詢顯示所有講師的 ID、姓名和平均考試和課程權重,並確保所有列都有合適的標題。研究使用 ISNULL 函式在講師不教授任何模組的情況下產生合適的輸出。

SELECT l.StaffID, l.FirstName, l.Surname, m.ModuleDescription
FROM dbo.Lecturer as l
RIGHT OUTER JOIN dbo.Module as m
   ON l.StaffID = m.ModuleConvenor
WHERE m.ExamWeight = SELECT AVG(m.ExamWeight) AS 'Avg ExWeight'
                    FROM dbo.Module as m2
                    WHERE m2.ModuleConcenor = l.StaffID OR m2.ModuleConvenor IS NULL) 
WHERE (SELECT AVG(m.CWWeight) AS 'Avg CWWeight'
   FROM dbo.Module as m3
   WHERE m3.ModuleConcenor = l.StaffID OR m3.ModuleConvenor IS NULL)

試試這個,它應該可以幫助你朝著正確的方向前進。

SELECT l.StaffID, 
      l.FirstName, 
      l.Surname, 
      m.ModuleDescription
FROM dbo.Lecturer as l
RIGHT OUTER JOIN dbo.Module as m
  ON l.StaffID = m.ModuleConvenor
WHERE m.ExamWeight = (
           SELECT AVG(m2.ExamWeight) AS 'Avg ExWeight'
             FROM dbo.Module as m2
            WHERE m2.ModuleConcenor = l.StaffID OR m2.ModuleConvenor IS NULL) 
AND m.CWWeight =  (
   SELECT AVG(m3.CWWeight) AS 'Avg CWWeight'
    FROM dbo.Module as m3
   WHERE m3.ModuleConcenor = l.StaffID OR m3.ModuleConvenor IS NULL)

我做了以下

  • 更新了 where 子句語法
  • 將聚合函式拼寫錯誤從 AVE 更新為 AVG
  • 更新了您在兩個子查詢中的聚合函式中使用的別名

您可能需要發布一些範例數據和表格 ddl 資訊。我不清楚如何根據您的查詢連接模組和講師表。這個答案有助於糾正你的語法,它可能不是你想要實現的完整解決方案。

引用自:https://dba.stackexchange.com/questions/239567