大概内容如下:
   先select id ,name,age from student
   然后通过 id从另一个表里带出科目和成绩出来
     select subject,score from grade  INNER JOIN student ON grade.id = student.id
  但是带出来的subject 是动态的 比如 id=1的话 可能带出来的就语文
            id=2的话就带出来 语文,数学了
如果就id=1要显示的是
       id  name age 语文
        1   A    18   60
如果id=2的也存在的话
      id  name age 语文   数学
       1   A   18  60
       2    B   17   40   80
就相当于那grade里查询出来的subject的值 作为字段来显示
 最后要放进 DATEGRID里面的 要怎么做哈 请高手帮帮忙哈

解决方案 »

  1.   

    create table student
    (
    id int,
            name nvarchar(50),
    age int,
    )
    insert into student values(1,'A',18)
    insert into student values(2,'B',18)
    insert into student values(3,'C',18)
    insert into student values(4,'D',18)
    insert into student values(5,'E',18)
    create table grade
    (
    id int,
            subject nvarchar(50),
    score int,
    )
    insert into grade values(1,'语文',80)
    insert into grade values(2,'语文',80)
    insert into grade values(2,'数学',80)
    insert into grade values(3,'语文',80)
    insert into grade values(3,'物理',80)
    insert into grade values(3,'化学',80)
    大致的关系是这样的 下面改怎么办,谢谢帮忙哈
      

  2.   

    declare @sql varchar(8000)
    set @sql = 'select a.id,name,age'
    select @sql = @sql + ',case b.subject when ''' + subject + ''' then score else null end as [' + subject + ']' from grade group by subject
    exec (@sql + ' from student a left join grade b on a.id=b.id')
      

  3.   

    如果不显示
    student中id在表grade中不存在的记录则把 left join 改为inner join
      

  4.   

    谢谢 leohuang(LEO) 
     好象还有点小问题 如果 id = 1的时候 其实只有语文成绩 其他成绩的字段不需要带出来的 也带出来了 
    1 A 18 NULL NULL NULL 80
    成这样了  可以不带出来么  要是就id=1的话
      

  5.   

    最后要放到一个DATEGRID里面去的 如果就id=1的话就带出语文成绩 其他就不显示的 所以要先判断那个科目有没有
      

  6.   

    在from grade 及group by subject 之后加上 where id=1就可以了
    -----------------declare @sql varchar(8000)
    set @sql = 'select a.id,name,age'
    select @sql = @sql + ',case b.subject when ''' + subject + ''' then score else null end as [' + subject + ']' from grade where id=1 group by subject
    exec (@sql + ' from student a inner join grade b on a.id=b.id')
      

  7.   

    加了id=1了 可是好象 id=1 2 3的还是都带出来的
      

  8.   

    加了id=1了 可是好象 id=1 2 3的还是都带出来的
     就是2 3的其他成绩不出来了 就出来语文成绩了的
      

  9.   

    那再在exec里那个语句里加个where a.id=1exec (@sql + ' from student a inner join grade b on a.id=b.id where a.id=1')
      

  10.   

    好了 基本可以了 谢谢了 那怎么样仍到DATEGRID里面去呢? 直接绑定上去么?
      

  11.   

    --可以建立一个带参数存储过程create procedure spGetData
    @id int
    as
    declare @sql varchar(8000)
    set @sql = 'select a.id,name,age'
    select @sql = @sql + ',case b.subject when ''' + subject + ''' then score else null end as [' + subject + ']' from grade where id=@id group by subject
    set @sql = @sql + ' from student a inner join grade b on a.id=b.id where a.id=' + convert(varchar,@id)
    exec (@sql)--调用的时候
    exec spGetData 1
      

  12.   

    还有条件的哈 因为FROM上还有控件 我那是FROM上的控件都不加值 要是加值的话 还需要连上where 条件的??
      

  13.   

    那个student 实际用到的是很多表关联起来的 可以用SQL语句拼凑么???
      

  14.   

    都是文本框的那些条件是可以接在SQL语句后面的 只要拼出SQL语句就好了的
      

  15.   

    你应该试着改变你的思路,拼出来的语句是不安全的student你可以用视图的方式来建立
      

  16.   

    对呀 我建好了的 STUDENT 是 sql1的语句 sql2的语句就是要显示象成绩 分数那样子显示的 如果拼出来SQL语句的话 我FORM里面文本框的条件也好加进去了呀
      

  17.   

    你可以一开始把所有的数据放到DataView或DataTable里,然后根据生成的条件从DataTable或DataView里选择