2017-01-10 10 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_] 

, но это приносит до ошибки

Msg 8120, уровень 16, состояние 1, строка 9 Колонка «MYDB $ курс Re gistration.Student No_ 'недействителен в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

любая помощь?

+2

Чего вы хотите достичь? Вы, очевидно, не знаете, что такое группировка. –

+0

Именно то, что говорится в сообщении об ошибке! если вы хотите, чтобы какая-либо реальная помощь опубликовала некоторые данные, как выглядят таблицы, и ожидаемый результат – e4c5

+0

Конечной целью является создание отчета (сводка хранения), чтобы найти коэффициент удержания для разных программ, сгруппированных по категории экзамена (например, бакалавриат, аспирант и т.д.) и по полу через различные стадии их прогрессирования 'code' SELECT COUNT (DISTINCT [Student no_]) FROM [MYDB $ курс Registration] внутреннее соединение [MyDB $ Customer] ON [Student no_] = No_ внутреннее соединение [MYDB $ Program] ON Код = Программа WHERE Semester = 'SEM1 16/17' AND Gender = '1' AND Program = 'HT 100' AND Stage = '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

Примечание - что, если ур давая группу по выбору, то * не может быть в операторе отбора у вас назвать имена столбцов в операторе отбора выберите столбцы должны иметь агрегатную функцию, как максимум, количество, сумма и т.д., те столбцы, которые не имеют агрегированном имя функции, эти названия столбцов должны быть определены после того, как группа по п

// в вашем случае пол, описание, этап не входит в группе,

![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