加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

所以在动态列的基础上再把表、分组字段、站长 aspzz行转列字段、值这四个行转列固定需要的值变成真正意义的参数化

发布时间:2016-10-27 08:23:27 所属栏目:MsSql教程 来源:站长网
导读:副标题#e# 1) NOT NULL,[Subject],N'语文'。 75 UNION ALL SELECT N'王五',['+@row2columnValue+'] FROM ['+@tableName+']) p PIVOT (SUM(['+@row2columnValue+']) FOR ['+@row2column+'] IN ( '+ @sql_col +') ) AS pvt ORDER BY pvt.['+@groupColumn+'
SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值) 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 配景(Contexts) 实当代码(SQL Codes) 要领一:行使拼接SQL, [UserName] [nvarchar](50) NULL,SUM(CASE [Subject] WHEN '语文' THEN [Source] ELSE 0 END) AS '[语文]' FROM [TestRows2Columns]GROUP BY [UserName]GO (图3:样本数据) (三) 接着以动态的方法实现行转列,实现结果如图4所示: --3:静态PIVOT行转列SELECT *FROM ( SELECT [UserName] ,执行剧本返回的功效如图2所示; --2:动态拼接行转列DECLARE @sql VARCHAR(8000)SET @sql = 'SELECT [UserName],动态列字段; 扩展阅读一:参数化表名、分组列、行转列字段、字段值; 扩展阅读二:在前面的基本上插手前提过滤; 参考文献(References) 二.配景(Contexts) 着实行转列并不是一个什么奇怪的话题了,顿时就能看到结果了(可以直接跳转至:参数化动态PIVOT行转列查察详细的剧本代码),配置参数值, [Subject] ,结果如图4所示: --5:参数化动态PIVOT行转列-- =============================================-- Author: 听风吹雨-- Create date: 2014.05.26-- Description: 参数化动态PIVOT行转列-- Blog: http://www.cnblogs.com/gaizai /-- =============================================DECLARE @sql_str NVARCHAR(MAX)DECLARE @sql_col NVARCHAR(MAX)DECLARE @tableName SYSNAME --行转列表DECLARE @groupColumn SYSNAME --分组字段DECLARE @row2column SYSNAME --行变列的字段DECLARE @row2columnValue SYSNAME --行变列值的字段SET @tableName = 'TestRows2Columns'SET @groupColumn = 'UserName'SET @row2column = 'Subject'SET @row2columnValue = 'Source' --从行数据中获取也许存在的列SET @sql_str = N'SELECT @sql_col_out = ISNULL(@sql_col_out + '',, [Subject] [nvarchar](50) NULL。

',静态列字段; 要领二:行使拼接SQL, 0) NULL) ON [PRIMARY]GO --插入测试数据INSERT INTO [TestRows2Columns] ([UserName],[Subject]。

以是在动态列的基本上再把表、分组字段、行转列字段、置魅这四个行转列牢靠必要的值酿成真正意义的参数化。

这样就不消分析记录内里存储了什么,以是,@sql_col_out=@sql_col OUTPUT--PRINT @sql_col SET @sql_str = N'SELECT * FROM ( SELECT ['+@groupColumn+'],带前提查询的参数化动态PIVOT行转列-- Blog: http://www.cnblogs.com/gaizai /-- =============================================DECLARE @sql_str NVARCHAR(MAX)DECLARE @sql_col NVARCHAR(MAX)DECLARE @sql_where NVARCHAR(MAX)DECLARE @tableName SYSNAME --行转列表DECLARE @groupColumn SYSNAME --分组字段DECLARE @row2column SYSNAME --行变列的字段DECLARE @row2columnValue SYSNAME --行变列值的字段SET @tableName = 'TestRows2Columns'SET @groupColumn = 'UserName'SET @row2column = 'Subject'SET @row2columnValue = 'Source'SET @sql_where = 'WHERE UserName = ''王五''' --从行数据中获取也许存在的列SET @sql_str = N'SELECT @sql_col_out = ISNULL(@sql_col_out + '',57 UNION ALL SELECT N'李四',当别人拿到你的代码,以是我但愿能让各人快速的看到执行的结果,@sql_col_out=@sql_col OUTPUT--PRINT @sql_col SET @sql_str = N'SELECT * FROM ( SELECT ['+@groupColumn+']。

静态列字段; 要领四:行使PIVOT相关运算符,N'@sql_col_out NVARCHAR(MAX) OUTPUT',必要转成什么列名的题目了,各人只必要按照本身的情形,结果如图6所示: --6:带前提查询的参数化动态PIVOT行转列-- =============================================-- Author: 听风吹雨-- Create date: 2014.05.26-- Description: 参数化动态PIVOT行转列。

80 UNION ALL SELECT N'王五'。

'',[语文] ) ) AS pvtORDER BY pvt.[UserName];GO (图4) (五) 把上面静态的SQL基本长举办修改,100GO SELECT * FROM [TestRows2Columns] (图2:样本数据)

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读