--> --> (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
declare @s nvarchar(4000),@s2 nvarchar(4000),@s3 nvarchar(4000),@s4 nvarchar(4000)
select
@s=isnull(@s+',','declare ')+'@'+rtrim(Colid)+' nvarchar(4000)',
@s2=isnull(@s2+',','select ')+'@'+rtrim(Colid)+'='''+case when @s2 is not null then 'union all select' else ' select ' end+' [科目]='''+quotename(Name,'''')+'''''',
@s3=isnull(@s3,'')+'select @'+rtrim(Colid)+'=@'+rtrim(Colid)+'+'',''+quotename([Student])+''=''+quotename('+quotename(Name)+','''''''') from Class ',
@s4=isnull(@s4+'+','')+'@'+rtrim(Colid)
from
syscolumns
where
id=object_id('Class') and Name not in('Student')
--print @s+' '+@s2+' '+@s3+' exec('+@s4+')' 显示执行语句
exec(@s+' '+@s2+' '+@s3+' exec('+@s4+')')
/*
科目 李四 张三
---- ---- ----
数学 77 87
物理 85 90
英语 65 82
语文 65 78
*/
另类显示格式,把列数转为行数显示
if not object_id('Class') is null
drop table Class
Go
Create table Class([Student] nvarchar(2),[Course] nvarchar(2),[Score] int)
Insert Class
select N'张三',N'语文',78 union all
select N'张三',N'数学',87 union all
select N'张三',N'英语',82 union all
select N'张三',N'物理',90 union all
select N'李四',N'语文',65 union all
select N'李四',N'数学',77 union all
select N'李四',N'英语',65 union all
select N'李四',N'物理',85
GO
DECLARE @Sql NVARCHAR(max)
SET @Sql=(SELECT ',[Col'+RTRIM(ROW_NUMBER()OVER(ORDER BY RAND()))+']='''+[Student]+'''' FROM dbo.Class FOR XML PATH(''))
SET @Sql=STUFF(@Sql,1,1,'SELECT ')+STUFF((SELECT ',[Col1]='''+[Course]+'''' FROM dbo.Class FOR XML PATH('')),1,1,' UNION ALL SELECT ')
SET @Sql=@Sql+STUFF((SELECT ',[Col1]='''+RTRIM([Score])+'''' FROM dbo.Class FOR XML PATH('')),1,1,' UNION ALL SELECT ')
EXEC(@Sql)
/*
Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8
张三 张三 张三 张三 李四 李四 李四 李四
语文 数学 英语 物理 语文 数学 英语 物理
78 87 82 90 65 77 65 85
*/
其它方法
http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html?seed=562318242
本文介绍使用SQL创建测试数据的方法,并演示了两种不同的数据展示方式:一种是将学生的各科成绩按列显示,另一种是将同一学生不同科目的成绩转换为行的形式,便于进行进一步的数据分析。
1万+

被折叠的 条评论
为什么被折叠?



