读书人

如何让列名变成数据

发布时间: 2013-01-09 09:38:15 作者: rapoo

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


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

读书人网 >SQL Server

热点推荐