自动生成unpivot,方便table展示字符度量
来源:互联网 发布:乐视电视怎么设置网络 编辑:程序博客网 时间:2024/06/15 22:27
DECLARE @TBLNAME NVARCHAR(100),@SCHEMA NVARCHAR(100) --SELECT @TBLNAME='T_ORGAN_OUTLET_WEEKLY_REPORT',@SCHEMA='DBO'CREATE PROC up_auto_create_unpivot( @TBLNAME NVARCHAR(100),@SCHEMA NVARCHAR(100))as--SELECT @TBLNAME='V_RELATION2',@SCHEMA='DBO'SET NOCOUNT ONDECLARE @SQLSTR NVARCHAR(500)=N''DECLARE @SQL NVARCHAR(MAX)=N''DECLARE MY_CURSOR CURSOR FAST_FORWARD READ_ONLY FORWITH GENSQL AS(SELECT C.ORDINAL_POSITION,CASE WHEN ROW_NUMBER()OVER(ORDER BY C.ORDINAL_POSITION)=1 THEN ' WITH TEMP AS(SELECT TOP 11 ROW_NUMBER()OVER(ORDER BY '+C.COLUMN_NAME+')ID ,' ELSE ',' END +CASE WHEN DATA_TYPE LIKE 'DATE%' THEN ' CAST( CONVERT(NVARCHAR(10),'+C.COLUMN_NAME+',120) AS NVARCHAR(50))' ELSE ' CAST('+C.COLUMN_NAME+' AS NVARCHAR(50))' END +'AS '+C.COLUMN_NAME+''+ CASE WHEN ROW_NUMBER()OVER(ORDER BY C.ORDINAL_POSITION DESC)=1 THEN ' FROM '+C.TABLE_SCHEMA+'.'+C.TABLE_NAME +')'ELSE ' ' END SQLSTRFROM INFORMATION_SCHEMA.[COLUMNS] AS C WHERE C.TABLE_NAME=@TBLNAME AND C.TABLE_SCHEMA=@SCHEMA--ORDER BY C.ORDINAL_POSITION UNION ALLSELECT C.ORDINAL_POSITION+1000 ORDINAL_POSITION,CASE WHEN ROW_NUMBER()OVER(ORDER BY C.ORDINAL_POSITION)=1 THEN 'SELECT * FROM TEMP UNPIVOT ( VAL FOR KPI IN ('+C.COLUMN_NAME ELSE ','+C.COLUMN_NAME END + CASE WHEN ROW_NUMBER()OVER(ORDER BY C.ORDINAL_POSITION DESC)=1 THEN ') )UPVT INNER JOIN TEMP T1 ON T1.ID=UPVT.ID' ELSE ' ' END SQLSTRFROM INFORMATION_SCHEMA.[COLUMNS] AS C WHERE C.TABLE_NAME=@TBLNAME AND C.TABLE_SCHEMA=@SCHEMA--ORDER BY C.ORDINAL_POSITION )SELECT SQLSTR FROM GENSQL ORDER BY ORDINAL_POSITION OPEN MY_CURSORFETCH FROM MY_CURSOR INTO @SQLSTRWHILE @@FETCH_STATUS = 0BEGIN/*{ ... CURSOR LOGIC HERE ... }*/SET @SQL+=@SQLSTR+' 'PRINT @SQLSTRFETCH FROM MY_CURSOR INTO @SQLSTRENDCLOSE MY_CURSORDEALLOCATE MY_CURSORSELECT 'CREATE VIEW V_AUTO_'+@TBLNAME+'AS '+@SQL AS [SQL]--EXEC(@SQL) --SELECT * FROM INFORMATION_SCHEMA.[COLUMNS] AS C
ALTER PROC UP_AUTO_CREATE_UNPIVOT( @TBLNAME NVARCHAR(100)=NULL,@WHERESQL NVARCHAR(500)='',@SCHEMA NVARCHAR(10)='DBO',@TOP INT=10)AS--SELECT @TBLNAME='V_RELATION2',@SCHEMA='DBO'SET NOCOUNT ONIF @TBLNAME IS NOT NULL AND @WHERESQL IS NOT NULLBEGINDECLARE @SQLSTR NVARCHAR(500)=N''DECLARE @SQL NVARCHAR(MAX)=N''DECLARE MY_CURSOR CURSOR FAST_FORWARD READ_ONLY FORWITH GENSQL AS(SELECT C.ORDINAL_POSITION,CASE WHEN ROW_NUMBER()OVER(ORDER BY C.ORDINAL_POSITION)=1 THEN ' WITH TEMP AS(SELECT '+CASE WHEN @top >=0 THEN ' top '+cast( @TOP AS NVARCHAR(10)) ELSE '' END +' ROW_NUMBER()OVER(ORDER BY '+C.COLUMN_NAME+')[ID#] ,' ELSE ',' END +CASE WHEN DATA_TYPE LIKE 'DATE%' THEN ' CAST( CONVERT(NVARCHAR(10),'+C.COLUMN_NAME+',120) AS NVARCHAR(50))' ELSE ' CAST('+C.COLUMN_NAME+' AS NVARCHAR(50))' END +'AS '+C.COLUMN_NAME+''+ CASE WHEN ROW_NUMBER()OVER(ORDER BY C.ORDINAL_POSITION DESC)=1 THEN ' FROM '+C.TABLE_SCHEMA+'.'+C.TABLE_NAME +' '+@WHERESQL+')'ELSE ' ' END SQLSTRFROM INFORMATION_SCHEMA.[COLUMNS] AS C WHERE C.TABLE_NAME=@TBLNAME AND C.TABLE_SCHEMA=@SCHEMA--ORDER BY C.ORDINAL_POSITION UNION ALLSELECT C.ORDINAL_POSITION+1000 ORDINAL_POSITION,CASE WHEN ROW_NUMBER()OVER(ORDER BY C.ORDINAL_POSITION)=1 THEN 'SELECT '+QUOTENAME(@TBLNAME,'''' )+' TBLNAME,'+QUOTENAME(@SCHEMA,'''' )+' TABLE_SCHEMA, UPVT.[ID#] [IDD#],ORDINAL_POSITION,KPI [KPI#],VAL [VAL#],T1.* FROM TEMP UNPIVOT ( VAL FOR KPI IN ('+C.COLUMN_NAME ELSE ','+C.COLUMN_NAME END + CASE WHEN ROW_NUMBER()OVER(ORDER BY C.ORDINAL_POSITION DESC)=1 THEN ') )UPVT INNER JOIN TEMP T1 ON T1.[ID#]=UPVT.[ID#]'+' INNER JOIN INFORMATION_SCHEMA.[COLUMNS] AS C ON C.TABLE_NAME='+QUOTENAME(@TBLNAME,'''' )+' AND C.TABLE_SCHEMA='+QUOTENAME(@SCHEMA,'''' )+' AND C.COLUMN_NAME=KPI ' ELSE ' ' END SQLSTRFROM INFORMATION_SCHEMA.[COLUMNS] AS C WHERE C.TABLE_NAME=@TBLNAME AND C.TABLE_SCHEMA=@SCHEMA--ORDER BY C.ORDINAL_POSITION )SELECT SQLSTR FROM GENSQL ORDER BY ORDINAL_POSITION OPEN MY_CURSORFETCH FROM MY_CURSOR INTO @SQLSTRWHILE @@FETCH_STATUS = 0BEGIN/*{ ... CURSOR LOGIC HERE ... }*/SET @SQL+=@SQLSTR+' 'PRINT @SQLSTRFETCH FROM MY_CURSOR INTO @SQLSTRENDCLOSE MY_CURSORDEALLOCATE MY_CURSOR--SELECT 'CREATE VIEW V_AUTO_'+@TBLNAME+'AS '+@SQL AS [SQL]EXEC(@SQL) ENDELSEBEGINPRINT '@TBLNAME IS NULL'END GOEXEC UP_AUTO_CREATE_UNPIVOT 't_orderheader','','dbo' ,1
阅读全文
0 0
- 自动生成unpivot,方便table展示字符度量
- PowerDesigner自动生成Table
- js自动生成table
- banner自动生成工具,ascii文字展示
- table展示数据,数据分页查询,底部导航生成
- table自动隐藏过长的字符
- Django自动生成table name依据
- jquery ajax自动生成表格table(一)
- Spring+JPA自动生成Table配置
- ADF中为Table自动生成行号
- jquery ajax自动生成表格table基础
- 根据JSON数据,自动生成Table
- 根据JSON数据,自动生成Table
- UNPIVOT
- 自动生成字符型订单单号
- javascript自动生成字符串(数字、字符)
- 解决jsp页面table TD列字符不能自动换行
- 如何设计度量数据展示的指示器?
- Android屏幕各尺寸的获取方法详解
- android开发常用依赖包
- mongo-connector实时增量索引
- 查看Resin版本号
- Python网页抓取工具Beautiful Soup面面观!
- 自动生成unpivot,方便table展示字符度量
- OpenCL快速入门教程
- android左右滑动监听,上下滑动
- shiro入门
- Android4.4系统浏览器Chromium实现的加载模块与流程
- Schwarzer教你用OpenCV实现基于标记的AR
- TCP漏洞引来黑客对Linux系统的攻击
- android的Activity采用透明主题
- 用python连接数据库,实现用户注册和用户登录