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帥選分組條件
結果