我的数据如下:
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
必需输出:参数是主题列值
ClassId ClassName TotalStudents SubjectIds
-----------------------------------------------
1 ESL 2 20, 40, 50, 30
当一个学生攻读多个科目时,只计算一次学生,所以在上面的数据中,12个学生ID需要多个科目,所以只计算一次。 TotalStudents值为2(来自学生ID 12的1和来自学生ID 13的1)
我不是在寻找如何以逗号分隔的字符串显示subjectIds列值。
提前致谢
答案 0 :(得分:0)
DISTINCT可以在聚合函数中应用。
SELECT COUNT(DISTINCT column_name)FROM table_name;
答案 1 :(得分:0)
如果您不需要显示SubjectId
,则需要使用GROUP BY子句将结果集分组为ClassId
和ClassName
。
SELECT ClassId, ClassName, COUNT(distinct StudentId) as TotalStudents
FROM MyTable
GROUP BY ClassId, ClassName
请参阅 SqlFiddle
中的此示例答案 2 :(得分: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
输出