邹建大哥救救我吧~!!动态列转行的问题!急救~!!!高手请快进!在线等
最近忙存储过程,里面有这样一个很棘手的问题。
就是我创建一个identity的列的表,然后动态的根据情况alter add一定的列
这样我可以拼成一个sql 查询语句。
然后执行了后可以达到一个很多列,只有一行的数据
现在要把这个一列很多行的值,转成一个很多行的表里面
列名 列名 列名
value value value
转成
列名 值
columns value
columns value
问题点数:100、回复次数:12Top
1 楼yangbo1983857(帝喾)回复于 2006-09-23 16:51:31 得分 0
首先列名,我不知道,我只知道有多少列!Top
2 楼paoluo(一天到晚游泳的鱼)回复于 2006-09-23 16:59:02 得分 0
每列的類型是不是一致的??Top
3 楼paoluo(一天到晚游泳的鱼)回复于 2006-09-23 17:09:08 得分 30
--建立測試環境
Create Table TEST
(Col1 Int,
Col2 Int,
Col3 Int,
Col4 Int,
Col5 Int)
--插入數據
Insert TEST Select 2,3,5,7,9
GO
--測試
Declare @S Varchar(8000)
Select @S = ''
Select @S = @S +' Union All Select '''+ Name + ''' As ColName,'+ Name +' As Value From TEST'
From SysColumns
Where ID=OBJECT_ID('TEST')
Order By ColID
Select @S = Stuff(@S,1,10,'')
EXEC(@S)
--刪除測試環境
Drop Table TEST
--結果
/*
ColName Value
Col1 2
Col2 3
Col3 5
Col4 7
Col5 9
*/
Top
4 楼yangbo1983857(帝喾)回复于 2006-09-23 18:17:04 得分 0
如果是
Create Table #TEST
(Col1 Int,
Col2 Int,
Col3 Int,
Col4 Int,
Col5 Int)
怎么办呢???
能在系统表取到值吗?Top
5 楼yangbo1983857(帝喾)回复于 2006-09-23 18:25:38 得分 0
我转换后的的结果或者表还需要用,这个结果能生成一个表吗?最好是临时表
#tableTop
6 楼yangbo1983857(帝喾)回复于 2006-09-23 18:34:45 得分 0
高手呢?
怎么没有人了???
救救我吧~!Top
7 楼zjcxc(邹建)回复于 2006-09-23 20:09:07 得分 70
-- 如果是
Create Table #TEST
(Col1 Int,
Col2 Int,
Col3 Int,
Col4 Int,
Col5 Int)
INSERT #TEST SELECT 1, 2, 3, 4, 5
GO
--測試
Declare @S Varchar(8000)
Select @S = ''
Select @S = @S +' Union All Select '''+ Name + ''' As ColName,'+ Name +' As Value From #TEST'
From tempdb.dbo.syscolumns
Where ID=OBJECT_ID('tempdb..#TEST')
Order By ColID
Select @S = Stuff(@S,1,10,'')
EXEC(@S)
--刪除測試環境
Drop Table #TEST
-- 结果:
ColName Value
------- -----------
Col1 1
Col2 2
Col3 3
Col4 4
Col5 5
(5 行受影响)
Top
8 楼zjcxc(邹建)回复于 2006-09-23 20:12:06 得分 0
我转换后的的结果或者表还需要用,这个结果能生成一个表吗?最好是临时表
局部的临时表不现实, 因为局部临时表在处理过程结束后就自动删除了.
可以用全局的临时表
Declare @S Varchar(8000)
Select @S = ''
Select @S = @S +' Union All Select '''+ Name + ''' As ColName,'+ Name +' As Value From #TEST'
From tempdb.dbo.syscolumns
Where ID=OBJECT_ID('tempdb..#TEST')
Order By ColID
Select @S = 'SELECT * INTO ##TEST FROM(' + Stuff(@S,1,10,'') + ')a'
EXEC(@S)
SELECT * FROM ##TEST
goTop
9 楼yangbo1983857(帝喾)回复于 2006-09-24 08:47:38 得分 0
谢谢邹建大哥~!!!!!!您真是太牛了啊~!这是您第二次帮我解决难题了!
真感谢您!Top
10 楼paoluo(一天到晚游泳的鱼)回复于 2006-09-25 08:15:20 得分 0
真是暈啊,怎麼在下班的時候才回復上來。Top
11 楼kenpa(大海无量)回复于 2006-10-12 02:33:19 得分 0
remarkTop
12 楼kiss_me(祥仔)回复于 2006-10-12 13:52:49 得分 0
很好啊1Top





