34,590
社区成员
请问对同一个表进行多次查询、统计的语句怎么写?
SQL Server 数据库
表:ChengJi
id name kecheng chengji xueqi
1 张三 高数 75 001
2 张三 语文 80 001
3 张三 英语 80 002
4 李四 化学 77 001
5 李四 历史 88 001
6 小明 英语 90 002
通过SQL 查询想得到如下结果:
name kechengshu jutikecheng xueqi
张三 2 高数、语文 001
张三 1 英语 002
李四 2 化学、历史 001
小明 1 英语 002
说明:就是根据学生的 ChengJi 表中的信息,对每一个学生进行数据统计,要得到每个学生 每学期都考了那些课程,共有几门课程等信息。
--测试数据
if not object_id(N'ChengJi') is null
drop table ChengJi
Go
Create table ChengJi([id] int,[name] nvarchar(22),[kecheng] nvarchar(22),[chengji] int,[xueqi] nvarchar(23))
Insert ChengJi
select 1,N'张三',N'高数',75,N'001' union all
select 2,N'张三',N'语文',80,N'001' union all
select 3,N'张三',N'英语',80,N'002' union all
select 4,N'李四',N'化学',77,N'001' union all
select 5,N'李四',N'历史',88,N'001' union all
select 6,N'小明',N'英语',90,N'002'
Go
--测试数据结束
select name,count(*) as kechengshu,
stuff((select ','+kecheng from ChengJi
where a.name=name and a.xueqi=xueqi
order by ','+kecheng
for xml path('')),1,1,'') as jutikecheng,xueqi
from ChengJi as a
group by name,xueqi
order by name,xueqi
--测试数据
if not object_id(N'ChengJi') is null
drop table ChengJi
Go
Create table ChengJi([id] int,[name] nvarchar(22),[kecheng] nvarchar(22),[chengji] int,[xueqi] nvarchar(23))
Insert ChengJi
select 1,N'张三',N'高数',75,N'001' union all
select 2,N'张三',N'语文',80,N'001' union all
select 3,N'张三',N'英语',80,N'002' union all
select 4,N'李四',N'化学',77,N'001' union all
select 5,N'李四',N'历史',88,N'001' union all
select 6,N'小明',N'英语',90,N'002'
Go
--测试数据结束
SELECT name,
COUNT(1) AS kechengshu,
STRING_AGG(kecheng,',') AS jutikecheng,
xueqi
FROM ChengJi
GROUP BY xueqi,
name;