数据表:
id    teachername    student      addtime        money
1    张三            郁闷 1           2011-2      10
2    李四            郁闷2            2011-3      101
3    王五            郁闷3            2011-4      10
4    张三            郁闷4            2011-5      10
5    张三            郁闷5            2011-6      101
6    王五            郁闷6            2011-7      11
7    王五            郁闷7            2011-8      11
8    李四            郁闷8            2011-8      12
      现在我要.net将其显示如下(要求可以根据某字段排序):
     张三            郁闷 1           2011-2
                     郁闷4            2011-5
                     郁闷5            2011-6
      李四           郁闷2            2011-3
                     郁闷8            2011-8
      王五           郁闷3            2011-4
                     郁闷6            2011-7
                     郁闷7            2011-8
=========说明,上面由于张三、李四、王五各自有学生N个,但张三、李四、王五只有一个,所以去掉老师名字,避免重复,只显示老师下面的学生,将他们集中在一起显示出来,另外还希望可以按入学时间或者学生的ID来排序。。
到底应该如何做?这个是属于sql语句问题还是程序要判断?
================================另:
要求同时返回money的总和,例如:
张三            郁闷 1           2011-2      121
上面的121是张三的总金钱数。
ps:第一个问题已经勉强用嵌套解决,但如果有更好办法请告知
最重要是第二个问题

解决方案 »

  1.   


    /*teachername student addtime money*/
    ;with ach as
    (
        select *,rid=row_number() over (partition by teachername order by id),
             (select sum(money) from tb where teachername = t.teachername) amount
        from tb t
    )select (case when rid=1 then teachername else '' end) teachername,student,addtime,money,amount
    from ach
      

  2.   

    这种语句MS不能直接写在页面上吧,要放个函数?还有,row_number()是不是2005起才有的函数?
    要是确实不能写在页面的,我还是用嵌套得了,不过我还是要解决第二个问题:
    1 张三 郁闷1 2011-2 10      520
    4 张三 郁闷4 2011-5 10      520
    5 张三 郁闷5 2011-6 101     520

    上面的数据我要返回:
    张三     121       520
    select * from 表名 a where not exists(select 1 from 表名 where a=a.a and b=a.b and c>a.c)
    这种好像只是判断某列相同,如果相同就取某列,不扔掉没用的字段,显得有些浪费,也没有返回某列的加值
    我的意思是对于红色那个表,将第数第二列相加,其它相同列的返回一列,不相同的扔掉,这样的语句有么?