送分和技巧:终于解决了多日期的交叉表SQL语句!!(100)

  • 主题发起人 主题发起人 凤冠坡
  • 开始时间 开始时间

凤冠坡

Unregistered / Unconfirmed
GUEST, unregistred user!
将下列语句放在SQL查询分析器里面执行就得到想要的效果。(分配分数的时候,前10名不低于5分,后面的平均分配)(本来修改成送800分的,结果忘记点那个小圆圈就....)create table tb(姓名 varchar(10) , 日期 DateTime , 分数 int)insert into tb values('张三' , '2001-1-1' , 74)insert into tb values('张三' , '2001-1-2' , 83)insert into tb values('张三' , '2001-1-3' , 93)insert into tb values('李四' , '2001-1-4' , 84)insert into tb values('李四' , '2001-1-5' , 94)insert into tb values('李四' , '2001-1-6' , 74)go--SQL SERVER 2000 动态SQL,指课程可能不止语文、数学、物理这三门课程。(以下同)declare @sql varchar(8000)set @sql = 'select 姓名 'select @sql = @sql + ' , max(case 姓名+CONVERT(char(12), 日期, 3) when ''' + 姓名+CONVERT(char(12), 日期, 3) + ''' then 分数 else 0 end) [' + 姓名+CONVERT(char(12), 日期, 3) + ']' from (select distinct 姓名,日期 from tb) as aset @sql = @sql + ' from tb group by 姓名'exec(@sql)该语句的功能就是:将原来竖向排列的数据按日期横向显示出来。比如:姓名A 数学 2010-1-1 100姓名A 语文 2010-1-2 100姓名b 数学 2010-1-3 90姓名b 语文 2010-1-4 95要显示成:姓名 数学2010-1-1 数学2010-1-2 数学2010-1-3 数学2010-1-4 语文2010-1-1 语文2010-1-2 语文2010-1-3 语文2010-1-4 姓名A 100 000 000 000 100 000 000 000姓名B 000 000 090 000 000 000 000 095
 
有看不明白意思的么?
 
请继续往下,。。。这个没什么特别的。
 
真是复杂,如果用报表工具解决会很简单的。如:Cognos
 
结果就是:按姓名排列,横向显示出每个日期的成绩
 
该语句的功能就是:将原来竖向排列的数据按日期横向显示出来。比如:姓名A 数学 2010-1-1 100姓名A 语文 2010-1-2 100姓名b 数学 2010-1-3 90姓名b 语文 2010-1-4 95要显示成:姓名 数学2010-1-1 数学2010-1-2 数学2010-1-3 数学2010-1-4 语文2010-1-1 语文2010-1-2 语文2010-1-3 语文2010-1-4 姓名A 100 000 000 000 100 000 000 000姓名B 000 000 090 000 000 000 000 095
 
这两个查询语句想要得到什么效果呢?应该把结果也列出来啊。和007vivi一样,我看了半天没看出什么特别的。
 
后退
顶部