SQL进行数据汇总并合并多个列值到一个新列

灰常可爱的码农 2018-08-01 05:41:19
SQL进行数据汇总并合并多个列值到一个新列

有如下数据:
学号 费用名称 学年 应交金额 已交金额 欠费
123456 电费 2014 100 50 50
123456 水费 2015 36 0 36
123456 教材费 2015 500 400 100

想要的查询结果如下
学号 总欠费 欠费明细
123456 186 电费(2014):50;水费(2015):36;教材费(2015):100

备注:
总欠费的计算规则=已交金额-应交金额
欠费明细 是由‘费用项目’‘学年’‘欠费’三个字段的值合并起来并进行了格式化。

请教SQL如何编写,谢谢各位
...全文
2412 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_25073223 2018-08-01
  • 打赏
  • 举报
回复
参阅以下stuff和forxml的用法,就可以搞定这个问题,请参考:https://www.cnblogs.com/lairui1232000/p/9404055.html
二月十六 2018-08-01
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([学号] int,[费用名称] nvarchar(23),[学年] NVARCHAR(100),[应交金额] int,[已交金额] int,[欠费] int)
Insert #T
select 123456,N'电费','2014',100,50,50 union all
select 123456,N'水费','2015',36,0,36 union all
select 123456,N'教材费','2015',500,400,100
Go
--测试数据结束
SELECT 学号 ,
SUM(已交金额-应交金额) AS 总欠费,
STUFF(( SELECT ',' + 费用名称+'('+学年+'):'+RTRIM(欠费)
FROM #T
WHERE 学号 = a.学号
FOR
XML PATH('')
), 1, 1, '') AS 欠费明细
FROM #T a
GROUP BY a.学号


shinger126 2018-08-01
  • 打赏
  • 举报
回复
SELECT 学号,SUM(欠费) 总欠费,欠费明细=stuff((SELECT ';'+费用名称+'('+CAST(学年 AS VARCHAR(10))+'):'+CAST(欠费 AS VARCHAR(10))
FROM 欠费表 b WHERE b.学号=a.学号 FOR XML PATH('')),1,1,'') FROM 欠费表 a GROUP BY 学号

22,302

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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