日期:2014-05-17  浏览次数:20547 次

怎么让列名变成数据
怎么让列名变成数据,且列名不变,意思就是查询出来的结果多出一行列名。


DECLARE @tab_Name TABLE ([name] NVARCHAR(MAX),[age] NVARCHAR(MAX))
INSERT INTO @tab_Name
        ( [name],[age] )
    VALUES ( '张三', -- name - nvarchar(max)
             '99'  -- age - int
             )
select 'name' AS name,'age' AS age
UNION ALL
SELECT [name] AS name,[age]AS age FROM @tab_Name
有没比这更方便点的,因为如果字段太多这个方法很笨拙。
------解决方案--------------------
你这个只能UNION ALL一列出来。
------解决方案--------------------
你去研究一下动态列转行

--2、列转行 
--> --> (Roy)生成測試數據 
   
if not object_id('Class') is null
    drop table Class 
Go 
Create table Class([Student] nvarchar(2),[数学] int,[物理] int,[英语] int,[语文] int) 
Insert Class 
select N'李四',77,85,65,65 union all
select N'张三',87,90,82,78 
Go 
  
--2000: 
  
动态: 
  
declare @s nvarchar(4000) 
select @s=isnull(@s+' union all ','')+'select [Student],[Course]='+quotename(Name,'''')--isnull(@s+' union all ','') 去掉字符串@s中第一个union all 
+',[Score]='+quotename(Name)+' from Class'
from syscolumns where ID=object_id('Class') and Name not in('Student')--排除不转换的列 
order by Colid 
exec('select * from ('+@s+')t order by [Student],[Course]')--增加一个排序 
  
生成静态: 
select *  
from (select [Student],[Course]='数学',[Score]=[数学] from Class union all 
select [Student],[Course]='物理',[Score]=[物理] from Class union all 
select [Student],[Course]='英语',[Score]=[英语] from Class union all 
select [Student],[Course]='语文',[Score]=[语文] from Class)t  
order by [Student],[Course] 
  
go