SQL SERVER 多行转为一列
一、多行转成一列(并以“,”分隔
表名: 费目主表(T_MAIN) ,表数据如下
2、费项明细表( T_DETAIL )数据如下:
上述两表通过 FEEGROUPID关联。
想要的效果如下:
查询SQL如下:
SELECT FEEGROUPID, GROUPCODE , GROUPNAME,
ITEMCODE =(STUFF((
SELECT ',' + ITEMCODE FROM T_DETAIL G1 WHERE G1.FEEGROUPID = T.FEEGROUPID FOR XML PATH('') )
, 1,1,''))
FROM T_MAIN
SQL 解释:
1、 STUFF()函数是为去除结果列 (ITEMCODE)的首字母“,”
2、FOR XML PATH(''):是为了将ITEMCODE的行转为 XML文本列,
内是为了不生成XML文本的首节点标签, SELECT ',' 是为了不生成XML文本的子节点标签
二、一列转多行
源表( T_TEST)数据如下:
想要的结果如下:
查询SQL:
SELECT a.FeeGroupId, GroupCode, b.[value]
FROM (SELECT FeeGroupId, GroupCode, [value]=CAST('<v>'+REPLACE(ItemCode,',','</v><v>')+'</v>' AS xml) FROM T_TEST) a
OUTER APPLY (SELECT [value]=T.C.value('.','varchar(50)') FROM a.[value].nodes('/v') AS T(C)) b
三、将数据按某列分组后,取此组前几行数据
SELECT T.FEEGROUPID, ITEMCODE, ITEMNAME FROM
(SELECT FLM_FEEITEMLIST.*,ROW_NUMBER() OVER(PARTITION BY FEEGROUPID ORDER BY FEEGROUPID DESC) RN FROM FLM_FEEITEMLIST WHERE ITEMCODE LIKE '10%') T
WHERE RN<=4
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏