sql server 查询数据变成字符串
;with datum as (
select datumName from tb_b_datum where status = 1
)select DatumName= stuff((SELECT ',' + datumName FROM (select distinct datumName from datum) t1 for xml path('')),1,1,'')
结果
积分排行
select DatumName , row_number() over(order by DatumName asc, DatumId) as OrderNum
from tb_b_datum
where status = 1
数据排序后取前三条
例如:学生一个学生同一门课程有多条成绩,只取其中2门
学生 | 科目 | 分数 |
---|---|---|
张三 | 英语 | 60 |
张三 | 英语 | 86 |
张三 | 英语 | 90 |
张三 | 英语 | 50 |
张三 | 英语 | 20 |
李四 | 英语 | 60 |
李四 | 英语 | 77 |
李四 | 英语 | 55 |
李四 | 英语 | 88 |
李四 | 英语 | 100 |
select
row_number()over(partition by username order by userName,CourseName asc) as number,CourseName,username
into #CourseList
from tb_e_CourseList
select
CourseName,userName
from #CourseList where number <= 2
在使用列转行
select
b.studentName
,a.userName
,isnull(Stuff((Select ','+ uc.CourseName From #CourseList uc
where a.username = uc.UserName and uc.number <= 2
for xml path('')),1,1,''),'') As CourseName
from #numberList a
inner join tb_e_student b on a.username = b.username
group by b.studentName,a.userName
sql server 纵向转横向
表结果
sql语句
SELECT *
FROM [tb_t_nian] pivot(MAX(绩效) FOR 季度 in([1],[2],[3],[4])) a
结果
sql server 重复的数据删除剩余一条(这里的id使用的uuid)
select username,min(id) as id , count(username) as num
from tb_e_table
group by username having count(username) > 1