SQL行转列和列转行代码详解
发布时间:2021-01-11 18:03:18 所属栏目:MsSql 来源:互联网
导读:这篇文章主要介绍了SQL行转列和列转行代码详解,涉及动态方案和静态方案两种处理方式,具有一定参考价值,需要的朋友可以了解下。
行列互转,是一个经常遇到的需求。实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现。 行转列-静态方案:行转列-动态方案:加入了xml处理和SQL注入预防判断@Y);
END
IF dbo.fn_CheckSQLInjection(@SQL)=0
SET @SQL=N'SELECT custid'+@SQL+N' FROM orders group by custid'
PRINT @SQL
EXEC sp_executesql @SQL
GO
--行转列的动态方案二:PIVOT,sql2005及以后版本
DECLARE @T TABLE (years INT NOT NULL PRIMARY KEY);
INSERT INTO @T
SELECT DISTINCT YEAR(orderdate) from orders;
DECLARE @Y INT;
SET @Y=(SELECT MIN(years) from @T);
DECLARE @SQL NVARCHAR(4000)=N'';
--这里使用了xml处理来处理类组字符串
SET @SQL=STUFF((SELECT N','+QUOTENAME(years) FROM @T
FOR XML PATH('')),N'');
IF dbo.fn_CheckSQLInjection(@SQL)=0
SET @SQL=N'select * from (select DISTINCT custid,qty from orders) as ord
pivot(sum(qty) for years in('+@SQL+N'))as p';
PRINT @SQL;
EXEC SP_EXECUTESQL @SQL;
GO
列转行:1 AND TABLE_NAME='PvtCustOrders'
FOR XML PATH('')),N'')
SET @SQL=N'SELECT custid,qty
from dbo.pvtCustOrders
unpivot(qty for years in('+@SQL+'))as up';
PRINT @SQL;
EXEC SP_EXECUTESQL @SQL;
总结 以上就是本文关于SQL行转列和列转行代码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:、、等,有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对脚本之家网站的支持! (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |