sql server 查询结果集 列 转行 过程

该方法,实现了,sql server 查询出的结果集,先放入临时表,通过临时表,把列转为行。


--1.把结果放入临时表

SELECT * INTO #Tab FROM dbo.OperateDefine 
--2.定义返回表变量
DECLARE @retTable TABLE(rowid int,[VALUES] nvarchar(500),code nvarchar(100))
--3.调用转换过程,把jtr
INSERT INTO @retTable
EXEC spmtConvertTmpColumnToRows 'tempdb..#Tab' 
--4.相关处理,
SELECT * FROM @retTable
--5.删除临时表

DROP TABLE #Tab






CREATE PROC dbo.spmtConvertTmpColumnToRows( @PassedTableName as NVarchar(255))
AS
begin
--把临时表中的列记录转为行记录


--DECLARE  @PassedTableName as NVarchar(255) 
--SET @PassedTableName='tempdb..#Tab'
    --DECLARE @ActualTableName AS NVarchar(255)


    --SELECT @ActualTableName = QUOTENAME( TABLE_NAME )
    --FROM INFORMATION_SCHEMA.TABLES
    --WHERE TABLE_NAME = @PassedTableName


DECLARE @CreateTableSql NVARCHAR(max)


SET  @CreateTableSql=' set nocount on declare  @TTT table( rowid int IDENTITY(1,1),'
SELECT @CreateTableSql+=
STUFF((
SELECT   ', [' + name + '] nvarchar(500)'
FROM    tempdb.sys.columns 
WHERE object_id = OBJECT_ID(@PassedTableName)
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '')
+')'+CHAR(10)--+' insert into @TTT select * from #tab'--  +@PassedTableName+'' 
 
SELECT @CreateTableSql+=' insert into @TTT select * from ' +REPLACE(@PassedTableName,'tempdb..','') 


DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL =--''-- 'declare @T table(  rowid int IDENTITY(1,1),value varchar(500),code varchar(500))
 
' select * FROM @TTT
UNPIVOT (
    value FOR code IN (
        ' + STUFF((
SELECT   ', [' + name + ']'
FROM    tempdb.sys.columns 
WHERE object_id = OBJECT_ID(@PassedTableName)
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + '
    )
) unpiv '
-- -- select * from @T
--PRINT  @CreateTableSql
--PRINT  @SQL
DECLARE @resultSql NVARCHAR(max);
SET @resultSql=@CreateTableSql+@SQL
EXEC (@resultSql)
----DROP TABLE #Tab
end
  

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leecyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值