SQL行转列和列转行代码详解
发布时间:2020-05-23 02:25:30 所属栏目: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行转列和列转行代码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:、、等,有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对脚本之家网站的支持! (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- sql – 从图像到Varbinary(最大)
- .net – Linq到SQL错误SQL不比较NText,Text,Xml或
- mysql下普通用户备份数据库时无lock tables权限的
- sql-server – 使用IF IsNumeric作为参数
- sql-server – 我应该使用SQL Server关键字作为列
- sqlserver进程死锁关闭的方法
- sql-server – 如何查找SQL Server上安装的Servi
- sql – Oracle REPLACE()函数不处理回车和换行
- 主键的SQL Server BIGINT或DECIMAL(18,0)
- SqlServer使用公用表表达式(CTE)实现无限级树形
热点阅读
