2017-01-10 56 views
0

我有這個疑問這是工作得很好:在查詢中使用GROUP BY SQL函數JOIN

SELECT [Exam Category] 
     ,[Student No_] 
     ,Gender 
     ,Description 
     ,Stage 
FROM [MYDB $Course Registration] 
    inner join [MYDB $Student] 
     ON [Student No_] = No_ 
    inner join [MYDB $Programme] 
     ON Code = Programme 
where Gender != 0 
order by [Exam Category] desc 
     ,[Student No_] 
     ,Stage 

但是,我想組由[Exam Category]

SELECT [Exam Category] 
     ,[Student No_] 
     ,Gender 
     ,Description 
     ,Stage 
FROM [MYDB $Course Registration] 
    inner join [MYDB $Customer] 
     ON [Student No_] = No_ 
    inner join [MYDB $Programme] 
     ON Code = Programme 
where Gender != 0 
group by [Exam Category] 
order by Stage 
     ,[Student No_] 

,但它帶來的了錯誤

消息8120,級別16,狀態1,行9列 「MYDB $課程重gistration.Student No_'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。

有幫助嗎?

+2

你想實現什麼?你顯然不知道分組的真正含義。 –

+0

究竟是什麼錯誤信息說!如果你想要任何真正的幫助發佈一些數據,表格的樣子和預期的結果 – e4c5

+0

最終目標是創建一個報告(保留總結)來查找不同課程的保留率,按考試類別分組(即本科, (學生號) 從[MYDB $課程註冊] 內部加入[MYDB $客戶] ON [學生號] = 「代碼」選擇COUNT(DISTINCT [學號] No_ inner join [MYDB $ Program] ON代碼= Program WHERE Semester ='SEM1 16/17'AND Gender ='1'AND Program ='HT 100'AND St​​age ='Y2S1''code' –

回答

0

如果您想通過Exam Category聚集,那麼我希望這樣的查詢:

SELECT [Exam Category], COUNT(*) 
FROM [MYDB $Course Registration] inner join 
    [MYDB $Customer] 
    ON [Student No_] = No_ inner join 
    [MYDB $Programme] 
    ON Code = Programme 
where Gender <> 0 
Group by [Exam Category]; 

注意,所有其他列已經從SELECT刪除。

如果這不是你想要的,那麼你應該編輯你的問題,並提供樣本數據和期望的結果。

1

請注意 - 如果你給出了group by選項,那麼*不能在選擇語句中 你不得不提到select語句中的列名稱 選擇列應該具有像max,count,sum等聚合函數, ,其不具有聚合函數名的那些列名的那些列應組之後由子句指定

//你的情況性別,描述,階段不被包括在基,

![SELECT [Exam Category] 
    ,[Student No_] 
    ,Gender 
    ,Description 
    ,Stage FROM [MYDB $Course Registration] 
inner join [MYDB $Customer] 
    ON [Student No_] = No_ 
inner join [MYDB $Programme] 
    ON Code = Programme where Gender != 0 group by [Exam Category] 

參考我的代碼檢查它

select MAX(Employee_Details.NewEmployeeId) 
    ,Employee_Details.First_Name 
from Employee_Details 
INNER JOIN EmployeeDesignation_List ON Employee_Details.Designation=EmployeeDesignation_List.Designation_id 
WHERE Employee_Details.Status='Active' 
GROUP BY Employee_Details.First_Name 
ORDER BY Employee_Details.First_Name