查询结果
就是想给这些记录根据sname变成两条记录,是典型的行转列问题
不过这个我想要的结果是后面又多两个列具体想要的列如下
---想要的列名(为了方便大家查看,我给竖着写)
学生姓名
语文上次分数
语文最新分数 
语文老师评语
语文限制分数
语文超出分数数学上次分数 
数学最新分数
数学老师评语
数学限制分数
数学超出分数物理上次分数
物理最新分数
物理老师评语 
物理限制分数 
物理超出分数  物理最新分数
物理老师评语 
物理限制分数 
物理超出分数   其中的 (课程名称+限制分数)组合成的列名记录是固定死的,是根据课程的不同而固定的,每个学生都一样
 比如语文固定 5分 数学固定 3分 物理固定4分  (课程名称+超出分数)组合成的列名是计算出的结果   超出分数 = 最新分数 - 上次分数 - 限制分数 
下面是SQL数据结构create table tb1 (sname varchar(10),classname varchar(10),oldcores int,nowcores int,note varchar(20))
go
insert into tb1 values('张三','语文',74,90,'及格')
insert into tb1 values('张三','数学',83,20,'更差')
insert into tb1 values('张三','物理',93,100,'不错')
insert into tb1 values('张三','物理',77,100,'不错')
insert into tb1 values('李四','语文',74,74,'随便')
insert into tb1 values('李四','数学',84,90,'还行')
insert into tb1 values('李四','物理',94,40,'差劲')
insert into tb1 values('李四','化学',94,40,'差劲')
go
select * from tb1
分在另一个帖子上,就这些啦, 呵呵,如果还不清楚,就问下吧。

解决方案 »

  1.   

    http://topic.csdn.net/u/20110809/14/6d47f00f-bb3a-430f-9e4b-3b964ed829c9.html?282看你原帖,有回复!
      

  2.   

    create table tb1 (sname varchar(10),classname varchar(10),oldcores int,nowcores int,note varchar(20))
    go
    insert into tb1 values('张三','语文',74,90,'及格')
    insert into tb1 values('张三','数学',83,20,'更差')
    insert into tb1 values('张三','物理',93,100,'不错')
    insert into tb1 values('张三','物理',77,100,'不错')
    insert into tb1 values('李四','语文',74,74,'随便')
    insert into tb1 values('李四','数学',84,90,'还行')
    insert into tb1 values('李四','物理',94,40,'差劲')
    insert into tb1 values('李四','化学',94,40,'差劲')
    go
    select sname as 学生姓名,
    max(case when classname='语文' then oldcores else 0 end) as 语文上次分数,
    max(case when classname='语文' then nowcores else 0 end) as 语文最新分数, 
    max(case when classname='语文' then note else '' end) as 语文老师评语,
    max(case when classname='语文' then 5 else 0 end) as 语文限制分数,
    min(case when classname='语文' then nowcores-nowcores-5 else 100 end) as 语文超出分数,max(case when classname='数学' then oldcores else 0 end) as 数学上次分数,
    max(case when classname='数学' then nowcores else 0 end) as 数学最新分数, 
    max(case when classname='数学' then note else '' end) as 数学老师评语,
    max(case when classname='数学' then 3 else 0 end) as 数学限制分数,
    min(case when classname='数学' then nowcores-nowcores-3 else 100 end) as 数学超出分数,max(case when classname='物理' then oldcores else 0 end) as 物理上次分数,
    max(case when classname='物理' then nowcores else 0 end) as 物理最新分数, 
    max(case when classname='物理' then note else '' end) as 物理老师评语,
    max(case when classname='物理' then 4 else 0 end) as 物理限制分数,
    min(case when classname='物理' then nowcores-nowcores-4 else 100 end) as 物理超出分数,max(case when classname='化学' then oldcores else 0 end) as 化学上次分数,
    max(case when classname='化学' then nowcores else 0 end) as 化学最新分数, 
    max(case when classname='化学' then note else '' end) as 化学老师评语,
    max(case when classname='化学' then 2 else 0 end) as 化学限制分数,
    min(case when classname='化学' then nowcores-nowcores-2 else 100 end) as 化学超出分数from tb1
    group by sname
    /*
    学生姓名       语文上次分数      语文最新分数      语文老师评语               语文限制分数      语文超出分数      数学上次分数      数学最新分数      数学老师评语               数学限制分数      数学超出分数      物理上次分数      物理最新分数      物理老师评语               物理限制分数      物理超出分数      化学上次分数      化学最新分数      化学老师评语               化学限制分数      化学超出分数
    ---------- ----------- ----------- -------------------- ----------- ----------- ----------- ----------- -------------------- ----------- ----------- ----------- ----------- -------------------- ----------- ----------- ----------- ----------- -------------------- ----------- -----------
    李四         74          74          随便                   5           -5          84          90          还行                   3           -3          94          40          差劲                   4           -4          94          40          差劲                   2           -2
    张三         74          90          及格                   5           -5          83          20          更差                   3           -3          93          100         不错                   4           -4          0           0                                0           100(2 行受影响)*/
    go
    drop table tb1