第四种行转列
--动态处理
select A.StuName,A.BZKTypeName,cast(A.BKCODE as varbinary(MAX)) even,
row_number() over (partition by StuName,BZKTypeName order by getdate()) ID
into #t1
from BKLIST A
--where StuName='林健辉'
declare @sql1 varchar(max)
declare @sql2 varchar(max)
declare @id int
declare @maxid int
select @maxid=max(id)
from #t1
set @id=1
set @sql1=''
set @sql2=''
while @id<@maxid
begin
set @sql1=@sql1+'['+CAST(@id as varchar(10))+'],'
set @sql2=@sql2+' case when '+'['+CAST(@id as varchar(10))+']'
+' IS null then '''' else CAST('+'['+CAST(@id as varchar(10))+']'
+' as varchar(100))+'','' end +'
set @id=@id+1
end
set @sql1=@sql1+'['+CAST(@id as varchar(10))+']'
set @sql2=@sql2+' case when '+'['+CAST(@id as varchar(10))+']'
+' IS null then '''' else CAST('+'['+CAST(@id as varchar(10))+']'
+' as varchar(100)) end '
--print @sql1
--print @sql2
declare @sql varchar(max)
set @sql='
select StuName,BZKTypeName,LEFT(BKCODE,LEN(BKCODE)-1) from (
SELECT StuName,BZKTypeName,
'+@sql2+'
BKCODE
FROM ( select * from #t1
) s2 PIVOT ( max(even) FOR ID IN ('+@sql1+')) as pvt
)s3
'
print @sql
exec( @sql)
-------------------------------------------------------------------
--执行的语句
select StuName,BZKTypeName,LEFT(BKCODE,LEN(BKCODE)-1) from (
SELECT StuName,BZKTypeName,
case when [1] IS null then '' else CAST([1] as varchar(100))+',' end
+ case when [2] IS null then '' else CAST([2] as varchar(100))+',' end
+ case when [3] IS null then '' else CAST([3] as varchar(100))+',' end
+ case when [4] IS null then '' else CAST([4] as varchar(100))+',' end
+ case when [5] IS null then '' else CAST([5] as varchar(100)) end
BKCODE
FROM ( select * from #t1
) s2 PIVOT ( max(even) FOR ID IN ([1],[2],[3],[4],[5])) as pvt
)s3
----------------------------------------------------------------------------------------------------------
--与XML方式的一次对比
--xml方式脚本
select B.StuName,B.BZKTypeName,left(NT,len(NT)-1) as evenNew
from (
select StuName,BZKTypeName,(
select BKCODE+','
from BKList
where StuName=A.StuName
and BZKTypeName=A.BZKTypeName
order by StuName,BZKTypeName
for
xml path('')
) as NT
from BKList A
group by StuName,BZKTypeName
) B
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器