1.前言:
最近做项目的时候遇到一个需求,查询一个时段选课的人数,还有学生的姓名。前端展示姓名是一个字符串,多个学生用,分开。因为是个实习生所以并不懂,于是去学习了一波。
2.环境
SqlServer + boot-data-jpa
3.SqlServer的STUFF函数。
STUFF(character_expression, start, length, character_expression)
- character_expression :一个字符数据表达式。可以是常量、变量,也可以是字符列或二进制数据列。
- start : 指定删除的位置。
- length : 指定删除的长度
示例:
SELECT
STUFF(
(
SELECT
',' + bookDate
FROM
T_HK_RESERVE_TUTOR_TIME FOR XML PATH ('')
),
1,
1,
''
)
for xml path ('')指定为 xml格式。
4.配合聚合函数grout By 使用
SELECT
COUNT (1) AS num,
r.teacherId as teacherId,
r.bookDate as bookDate,
r.timePeriodId AS timePeriodId,
STUFF(
(
SELECT ',' + s.realname from T_HK_RESERVE_TUTOR_TIME AS re INNER JOIN T_HK_STUDENT AS s on re.username = s .username
WHERE re.teacherId = r.teacherId
AND re.bookDate = r.bookDate
AND re.timePeriodId = r.timePeriodId
FOR XML PATH('')
)
, 1, 1, '') AS names
FROM
T_HK_RESERVE_TUTOR_TIME AS r
GROUP BY
r.teacherId,
r.bookDate,
r.timePeriodId
在stuff子查询中用where帅选分组条件
结果