2015-10-01 2 views
0

Мои данные, как показано ниже:группы по количеству раз

ClassId ClassName StudentId Subject  SubjectId 
----------------------------------------------------- 
1   ESL  12   English  20 
1   ESL  13   Science  30 
1   ESL  12   Social  40 
1   ESL  12   Maths  50 

Требуемая мощность: параметры Subject столбец значений

ClassId ClassName TotalStudents SubjectIds 
-----------------------------------------------  
1  ESL   2    20, 40, 50, 30 

Когда один студент занимает несколько предметов, то рассчитывать студент только один раз, так что в выше данных 12 - один идентификатор студента принимает несколько субъектов, поэтому учитывается только один раз. Значение TotalStudents равно 2 (1 от ученика id 12 и 1 от студента id 13)

Я не ищу, как отображать значение столбца subjectIds в строке, разделенной запятыми.

Заранее благодарен

+0

Является ли это Цюй что касается только подсчета каждого ученика один раз или о том, чтобы получить предметы в форме с разделителями-запятыми? –

ответ

0

COUNT DISTINCT затем использовать STUFF для комбинированного предмета

declare @temp table 
(ClassId int,ClassName nvarchar(max),StudentId int,Subject nvarchar(max), SubjectId int) 

insert into @temp values (1,'ESL',12,'English' ,  20) 
insert into @temp values (1,'ESL',13,'Science' ,  30) 
insert into @temp values (1,'ESL',12,'Social ' ,  40) 
insert into @temp values (1,'ESL',12,'Maths ' ,  50) 

select ClassId,ClassName,COUNT(DISTINCT StudentId) CNT, 
STUFF((SELECT ',' + CAST(t1.SubjectId AS NVARCHAR) 
          FROM @temp t1 
          WHERE StudentId = t1.StudentId 
          FOR XML PATH('')), 
          1, 1, '') SubjectIdS 
from @temp 
GROUP BY ClassId,ClassName 

ВЫВОД

enter image description here

0

DISTINCT может применяться внутри агрегатных функций.

SELECT COUNT (DISTINCT column_name) FROM table_name;

0

Если вам не нужно, чтобы отобразить SubjectId с, то вам необходимо использовать GROUP BY положение в группе Resultset по ClassId и ClassName.

SELECT ClassId, ClassName, COUNT(distinct StudentId) as TotalStudents 
FROM MyTable 
GROUP BY ClassId, ClassName 

Смотрите этот пример в SqlFiddle

Смежные вопросы