一个简单SQL 请指教 50送上

Top_小鑫 2020-09-25 02:39:07
姓名         期数      科目       分数

张三         1         中级考试      80

张三         2         中级考试      92

张三         3         中级考试      95

李四         1         中级考试      65

李四         2         中级考试      72

李四         4        中级考试       99

王五         1         中级考试      90

王五         2        中级考试       86

王五         3         中级考试      55

王五         4         中级考试      50



上面表中的数据   想统计成一个表 如下  多行展示。

姓名      期数1    科目         分数      期数2     科目        分数    期数3   科目        分数        期数4     科目      分数 期数5.....

张三        1        中级考试   80           2        中级考试     92        3     中级考试     95            

李四        1        中级考试   65           2        中级考试     72                                                   4       中级考试      99 ....

王五        1        中级考试    90          2        中级考试     86       3      中级考试     55              4       中级考试      50       .....
...全文
61 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Top_小鑫 2020-09-25
  • 打赏
  • 举报
回复
引用 1 楼 中国风 的回复:
use Tempdb
go
--> --> 中国风(Roy)生成測試數據
 
if not object_id(N'Tempdb..#T1') is null
	drop table #T1
Go
Create table #T1([姓名] nvarchar(102),[期数] bigint,[科目] nvarchar(104),[分数] bigint)
Insert #T1
select N'张三',1,N'中级考试',80 union all
select N'张三',2,N'中级考试',92 union all
select N'张三',3,N'中级考试',95 union all
select N'李四',1,N'中级考试',65 union all
select N'李四',2,N'中级考试',72 union all
select N'李四',4,N'中级考试',99 union all
select N'王五',1,N'中级考试',90 union all
select N'王五',2,N'中级考试',86 union all
select N'王五',3,N'中级考试',55 union all
select N'王五',4,N'中级考试',50
GO
DECLARE @Sql NVARCHAR(4000)='select [姓名]'
Select @Sql+=',max(case when [期数]='+RTRIM([期数])+' THEN [科目] ELSE '''' END) AS 科目'+RTRIM([期数])+',max(case when [期数]='+RTRIM([期数])+' then [分数] end) AS 期数'+RTRIM([期数]) from #T1 GROUP BY [期数]
SET @Sql+=' from #T1 group by [姓名]'
EXEC (@Sql)
/*
姓名	科目1	期数1	科目2	期数2	科目3	期数3	科目4	期数4
李四	中级考试	65	中级考试	72		NULL	中级考试	99
王五	中级考试	90	中级考试	86	中级考试	55	中级考试	50
张三	中级考试	80	中级考试	92	中级考试	95		NULL
*/
感谢。 感谢 分都送你了。希望你有时间帮我看看这篇 https://bbs.csdn.net/topics/397769282 再次感谢
中国风 2020-09-25
  • 打赏
  • 举报
回复
中国风 2020-09-25
  • 打赏
  • 举报
回复
use Tempdb
go
--> --> 中国风(Roy)生成測試數據
 
if not object_id(N'Tempdb..#T1') is null
	drop table #T1
Go
Create table #T1([姓名] nvarchar(102),[期数] bigint,[科目] nvarchar(104),[分数] bigint)
Insert #T1
select N'张三',1,N'中级考试',80 union all
select N'张三',2,N'中级考试',92 union all
select N'张三',3,N'中级考试',95 union all
select N'李四',1,N'中级考试',65 union all
select N'李四',2,N'中级考试',72 union all
select N'李四',4,N'中级考试',99 union all
select N'王五',1,N'中级考试',90 union all
select N'王五',2,N'中级考试',86 union all
select N'王五',3,N'中级考试',55 union all
select N'王五',4,N'中级考试',50
GO
DECLARE @Sql NVARCHAR(4000)='select [姓名]'
Select @Sql+=',max(case when [期数]='+RTRIM([期数])+' THEN [科目] ELSE '''' END) AS 科目'+RTRIM([期数])+',max(case when [期数]='+RTRIM([期数])+' then [分数] end) AS 期数'+RTRIM([期数]) from #T1 GROUP BY [期数]
SET @Sql+=' from #T1 group by [姓名]'
EXEC (@Sql)
/*
姓名	科目1	期数1	科目2	期数2	科目3	期数3	科目4	期数4
李四	中级考试	65	中级考试	72		NULL	中级考试	99
王五	中级考试	90	中级考试	86	中级考试	55	中级考试	50
张三	中级考试	80	中级考试	92	中级考试	95		NULL
*/

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧