补充,最好能把那个结果集生成一个视图,视图的字段名和结果集相同,不管是通过存储过程还是函数,我初用sql server ,还请高手大虾帮帮忙啊!

解决方案 »

  1.   

    bjjh的项数有最大值吗?都是小于等于2吗?如果最大值固定用union写视图还比较容易,如果不固定就比较麻烦了
      

  2.   

    有最大值10,所有的都<=10,但是不定,所以麻烦这位hinco(桃色德鲁依) 帮小女想想办法了,大谢啊!
      

  3.   

    xiaoku(野蛮人(^v^)) ( ) 信誉:100    Blog  2006-12-21 19:24:36  得分: 0  
     
     
       兄弟:这个库谁设计的?该打啊!
      
      sherryxuehua() ( ) 信誉:100    Blog  2006-12-21 19:37:01  得分: 0  
     
     
       有最大值10,所有的都<=10,但是不定,所以麻烦这位hinco(桃色德鲁依) 帮小女想想办法了,大谢啊!
      
     
    -------------------
    看来得改成 小MM,谁设计的库啊 ?麻烦!
      

  4.   

    因为要视图,所以只有用下面这样麻烦的方法
    先建立函数
    create function getstr(@s varchar(500),@char varchar(2),@loc int)
    returns varchar(50)
    begin
      declare @ret varchar(50),@i int
      while @loc>1 and @s<>'' select @i=charindex(@char,@s),@s=(case @i when 0 then '' else substring(@s,@i+1,len(@s)-@i) end),@loc=@loc-1
      select @i=charindex(@char,@s),@ret=case @i when 0 then @s else left(@s,@i-1) end
      return @ret
    end
    然后建立视图
    create view va
    as
    select * from
    (select courseinfo,coursename,point,dbo.getstr(bjjh,',',1) bjjh from a
    union 
    select courseinfo,coursename,point,dbo.getstr(bjjh,',',2) bjjh from a
    union
    ……
    select courseinfo,coursename,point,dbo.getstr(bjjh,',',10) bjjh from a) t
    where bjjh<>''
    /*结果
    -------------------- -------------------- -------------- -------------------- 
    0101011002_1_1       岩浆岩及变质岩石学_       80.05          地质03-1
    0101011002_1_1       岩浆岩及变质岩石学_       80.05          地质03-2
    0101011003_1_1       岩浆学_理论               90.50          地质03-1
    0101011003_1_1       岩浆学_理论               90.50          地质03-2(所影响的行数为 4 行)
    */
      

  5.   

    to:hinco(桃色德鲁依) 
    我现在的表里的记录的班级数是不定的,全用这样的union不知道会不会影响速度,当数据大的时候?现在我的数据很少,这个方法倒是很好用,谢谢你啦:),有时间能不能帮我再想想简化的方法?
      

  6.   

    我来结帖了,谢谢hinco(桃色德鲁依),分数相赠啦:)