如下:
学号  姓名   课程名称   成绩
101   Tom     English   88
101    Tom    PE         76
101    Tom    Chinese    66
如何将它合并成一条记录,如:
学号  姓名    English    PE    Chinese
101   Tom     88        76        66
SQL语句如何实现?

解决方案 »

  1.   

    如果是Access可以这样TRANSFORM First(成绩)
    SELECT 学号, 姓名
    FROM 表
    GROUP BY 学号, 姓名
    PIVOT 课程名称
      

  2.   

    这个在Access中可以,但在vb中就不行。那么在vb中如何使用交叉表查询呢?
      

  3.   

    A表结构如下:
    店名   地区    级别
    d1      北京    级别1
    d2     北京     级别2
    d3     天津     级别2
    d4     河肥     级别3
    d5     杭州     级别4
    d6     杭州     级别3想得到如下的结果:地区  级别1的店数  级别2的店数  级别3的店数 级别4的店数 合计
    北京    1            1              0           0        2
    杭州    0            0              1           1        2
    河肥    0            0              1           0        1
    天津    0            1              0           0        1
    合计    1            2              2           1        6如果列是固定的,我还可以做(case一个一个列出来)...但是现在是固定的,也就是说有可能级别有5,6,7....这样就要把所有的级别列出来,而不是从中选几个显示出来,怎么写SQL语句?
    -----------------------
    declare @sql varchar(8000)
    set @sql = 'select 地区'
    select @sql = @sql + ',sum(case 级别 when '''+cast(级别 as varchar(10))+''' then 1 else 0 end) as ['+cast(级别 as varchar(10))+'的店数]'
     from (select distinct 级别 from A表) as a
    select @sql = @sql+' from A表 group by 地区'exec(@sql)
    go
    呵,这是高手的回答,送你!
     
      

  4.   

    高手,解释解释上边的那个SQL语句好么,看起来挺复杂的
      

  5.   

    >这个在Access中可以,但在vb中就不行。那么在vb中如何使用交叉表查询呢?
    再vb中是可以使用的,交叉表JetSQL支持,T-SQL不支持,所以只能应用于Access,SQLServer不行
      

  6.   

    跟写别的查询一样
    rs.open "TRANSFORM First(成绩) SELECT 学号, 姓名 FROM 表 GROUP BY 学号, 姓名 PIVOT 课程名称",cnn