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行转列和列转行代码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:、、等,有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对脚本之家网站的支持! (编辑:哈尔滨站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Transactional replication(事务复制)详解之如何跳过一个
- 通过SQL Server的位运算功能巧妙解决多选查询方法
- 优化SqlServer--数据压缩
- sql server中批量插入与更新两种解决方案分享(存储过程)
- SQLServer 2000 升级到 SQLServer 2008 性能之需要注意的地
- sql-server – 如何在SQL Studio中将hierarchyid字段作为文
- 如何在SQL Server 2005数据库中导入SQL Server 2008的数据
- SqlServer 2005 T-SQL Query 学习笔记(1)
- 在sql Server自定义一个用户定义星期函数
- 配置 SQLServer2005 以允许远程连接