测试数据:
create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
go
下面是查询语句
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)问题就是sql查询横向显示怎么显示在jsp里?jsp页面里效果是
姓名 语文 数学 物理 
李四 74   84   94
张三 74   83   93

解决方案 »

  1.   

    你能详细点吗?常规显示我是这样的:
    ......
    String 姓名="";
    String 课程="";
    String 分数="";

        sql="select* from tb ";
    rst = stmt.executeQuery( sql );

    while(rst.next()){

    姓名=rst.getString("姓名").trim();
    课程=rst.getString("课程").trim();
    分数=rst.getString("分数").trim();    %>
      <tr >
        <td width="16%" align="center"><font size="2"><%=姓名%> </font></td>
        <td width="16%" align="center"><font size="2"><%=课程%> </font></td> 
        <td width="13%" align="center"><font size="2"><%=分数%> </font></td>
      </tr>
      <%
    }
       %>......
      

  2.   

    加个for循环,不就行了吗,你那是一条记录的
      

  3.   


    已经加上while可以循环了,但怎么来实现在页面里像下面这样的效果:姓名 语文 数学 物理 
    李四 74   84   94
    张三 74   83   93能写代码出来吗?
      

  4.   


    <tr>
    <td>姓名</td>
    <td>语文</td>
    <td>数学</td>
    <td>物理</td>
    </tr>
    <tr>
    对应你循环的四个<td>
    </tr>
      

  5.   

    如果用:declare @sql varchar(8000)set @sql = 'select 姓名 'select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'from (select distinct 课程 from tb) as a set @sql = @sql + ' from tb group by 姓名'exec(@sql)这句sql语句怎么来对应啊?
    姓名是可以对应的,其他的是用
    什么=rst.getString("什么").trim();
      

  6.   

    <table>
    <tr>
    <td>姓名</td>
    <td>课程</td>
    <td>分数</td>
    </tr>
    <%
    ......
    String 姓名="";
    String 课程="";
    String 分数="";    sql="select* from tb ";
    rst = stmt.executeQuery( sql );while(rst.next()){name=rst.getString("姓名").trim();
    classname=rst.getString("课程").trim();
    score=rst.getString("分数").trim();    %>
      <tr >
        <td width="16%" align="center"><font size="2"><%=name%> </font></td>
        <td width="16%" align="center"><font size="2"><%=classname%> </font></td> 
        <td width="13%" align="center"><font size="2"><%=score%> </font></td>
      </tr>
      <%
    }
       %>
    </table>
      

  7.   

    变量名忘了改了,尽量别用中文变量名:
    ......
    String name="";
    String classname="";
    String score="";
    ......
      

  8.   


    谢谢你们的回答,你的代码和我贴出的几乎没有什么其别,我要实现的是sql查询横向显示怎么显示在jsp里,效果是:
    姓名 语文 数学 物理 
    李四 74   84   94
    张三 74   83   93
    数据库有3门以上的课程,所以要用sql查询横向显示怎么显示在jsp页面里。sql语句是declare @sql varchar(8000)set @sql = 'select 姓名 'select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'from (select distinct 课程 from tb) as a set @sql = @sql + ' from tb group by 姓名'exec(@sql)
      

  9.   

    <table>
    <%
    ......
    sql="select* from tb ";
    rst = stmt.executeQuery( sql );
    int columnCount = rsmd.getColumnCount();//获取列数
    %>
    <tr>
    <%
    for(int i = 0; i < columnCount; i++)
    {
    String columnName = rst.getColumnName(i);
    %>
    <td><%=columnName%></td><!--遍历列名,生成表头-->
    <%
    }
    %>
    </tr><%
    while(rst.next()){//遍历行数
    %>
    <tr><%
    for(int i = 0; i < columnCount; i++)
    {
    String value=rst.getString(i).trim();    %>
        <td width="16%" align="center"><font size="2"><%=value%> </font></td><!--遍历每列的值-->
      <%
    }
    %>
      </tr>
    <%
    }
       %></table>
      

  10.   

    你sql可以直接这样写啊,orderby name就好了,然后在页面上判断是不是第一行,第一行则不判断,不是第一行则判断名字是否跟前面一行一样,一样就不换行,不一样就换行。另外一种就是sql改掉了