将一个表的所有字段和字段的值放在视图中

clever_yang 2016-09-18 04:04:59
将一个表的所有字段和字段的值放在视图中,该表所有字段的值都是唯一,类似于行列转换,


比如有3个列
C1 C2 C3
12 13 3A

我要放在一个表里面这样显示 ,好像是行列转换的,列转行?
列 内容
C1 12
C2 13
C3 3A


这里的C1,C2是一个表中的所有字段
...全文
271 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ginnnnnnnn 2016-09-21
  • 打赏
  • 举报
回复
有多行的数据的时候你这里怎么玩呢?
Ltr2011 2016-09-21
  • 打赏
  • 举报
回复

--关键词  COALESCE 

------语句 

DECLARE @aa NVARCHAR(1000)
SELECT @aa=COALESCE(@aa,'')+''''+s.name+''','+'CAST('+s.name+' AS NVARCHAR(50)) FROM TB_ChangePeople union select  TOP 1 '
 FROM (SELECT TOP 1 * FROM dbo.TB_ChangePeople ) t
 LEFT JOIN syscolumns s ON 1=1
  Where s.ID=OBJECT_ID('TB_ChangePeople')
 DECLARE @sql NVARCHAR(3000)
SET @sql='insert into tableB (columns1,columns2) select top 1 '+@aa+' TB_ChangePeople '

PRINT @sql

------结果  

insert into tableB (columns1,columns2)
 select top 1 'id',CAST(id AS NVARCHAR(50)) FROM TB_ChangePeople
  union select  TOP 1 't_Code',CAST(t_Code AS NVARCHAR(50)) FROM TB_ChangePeople
   union select  TOP 1 'c_OldDepartMentID',CAST(c_OldDepartMentID AS NVARCHAR(50)) FROM TB_ChangePeople
    union select  TOP 1 'c_OldDepartMentName',CAST(c_OldDepartMentName AS NVARCHAR(50)) FROM TB_ChangePeople
     union select  TOP 1 'c_OldExecuteCard',CAST(c_OldExecuteCard AS NVARCHAR(50)) FROM TB_ChangePeople
      union select  TOP 1 'c_OldExecuteName',CAST(c_OldExecuteName AS NVARCHAR(50)) FROM TB_ChangePeople
       union select  TOP 1 'c_OldContent',CAST(c_OldContent AS NVARCHAR(50)) FROM TB_ChangePeople
        union select  TOP 1 'c_OldBeginTime',CAST(c_OldBeginTime AS NVARCHAR(50)) FROM TB_ChangePeople
         union select  TOP 1 'c_OldEndTime',CAST(c_OldEndTime AS NVARCHAR(50)) FROM TB_ChangePeople
          union select  TOP 1 'c_NowDepartMentID',CAST(c_NowDepartMentID AS NVARCHAR(50)) FROM TB_ChangePeople
           union select  TOP 1 'c_NowDepartMentName',CAST(c_NowDepartMentName AS NVARCHAR(50)) FROM TB_ChangePeople 
Ltr2011 2016-09-21
  • 打赏
  • 举报
回复
目前也只想到游标
clever_yang 2016-09-18
  • 打赏
  • 举报
回复
手动的还是比较简单,我们现在的需求是不知道具体的字段名称, 我们所有的字段名列表会从syscolumns中取出, Select name from syscolumns Where ID=OBJECT_ID('表名'), 这样在新的视图中可以获取第一个表中的所有字段变成视图的第一列, 然后我们需要再加一列,将第一列对应的值全部取出来放在第二列...., 我知道用游标可以实现, 想问下大家还有没有其他的高招? 谢谢!
道素 2016-09-18
  • 打赏
  • 举报
回复

;WITH t(C1,C2,C3,A1) AS (
	  SELECT '12','13','3A','a' UNION ALL
	  SELECT '121','131','3A1','aa' 
)
SELECT vt.col1,vt.col2,vt.A1 FROM t
UNPIVOT (COL2 FOR COL1 IN (c1,c2,c3)) AS vt

/*
col1	col2	A1
C1	12	a
C2	13	a
C3	3A	a
C1	121	aa
C2	131	aa
C3	3A1	aa
*/
道素 2016-09-18
  • 打赏
  • 举报
回复

;WITH t(C1,C2,C3) AS (
	  SELECT '12','13','3A'
)
SELECT * FROM t
UNPIVOT (COL FOR c IN (c1,c2,c3)) AS vt

/*
COL	c
12	C1
13	C2
3A	C3
*/
clever_yang 2016-09-18
  • 打赏
  • 举报
回复
第二个新表的结构就是这样 COL1 COL2 (新表的字段名) C1 12 (第一行) C2 13 (第二行) C3 3A (第三行)
yooq_csdn 2016-09-18
  • 打赏
  • 举报
回复
比如有3个列 C1 C2 C3 12 13 3A 字段名是C1 值是 12 ? 如果是这样,第二行内容要怎么显示? 列 内容 C1 12 C2 13 C3 3A

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧