我是想由上面那个表产生下面这个表,我的意思是:a列中 1 第一次出现: 它的最小值 20001  20100
a列中 4 第一次出现: 它的最小值 20101  20150
a列中 1 第二次出现: 它的最小值 20151  20200高人帮个忙。

解决方案 »

  1.   

    select a,min(b),max(b) from table group by a
      

  2.   

    理解错误,DIM MAX,MIN 取一条记录A,取下一个记录A,若相等,比较B列,MAX=B,MIN=b.
    循环下去,若记录和先前的A不等,则写一次新记录,A,MAX,MIN,然后做同样操作,产生
    第二条记录A1,MAX1,MIN1.
      

  3.   

    a      b 
      1      20001
      1      20002
      ...     ...
      1      20100
      4      20101
      ...     ....
      4      20150
      1      20151
      ...     ...
      1      20200
    我想把这样的表转成如下结构
      a      b          c
      1    20001      20100
      4    20101      20150
      1    20151      20200大致可以这样写:declare @t table(a int,b int,group int)
    insert @t select a,b from yourTable  --你的数据先存入临时表
    declare @gr int
    set @gr=0
    declare @a int
    update @t set @gr=case when a=@a then @gr else @gr+1 end, group=@gr,@a=a
    select min(a) as a,min(b) as b,max(b) as c from @t group by group --你要的输出结果
      

  4.   

    随手写的代码,也许有语法错误,你理解意思就好。SQL Server的update可以顺序处理记录,并且,@a变量是按行改变的,而字段a是在update运行期间不改变的,这是这7条语句写成的程序的基本原理。当然这并不是SQL“标准”中规定的处理流程,那个所谓标准也没有规定相关的语义。因此这个程序只能用在SQL Server上。如果不理解原理,你可以到SQL Server论坛上去问问。
      

  5.   

    在说明白一点,经过update语句处理,中间表@t中的数据如下:  a      b        group
    ---------------------------
      1      20001     0
      1      20002     0
      ...     ...     ...
      1      20100     0
      4      20101     1
      ...     ....    ...
      4      20150     1
      1      20151     2
      ...     ...     ...
      1      20200     2此时group就可以一步到位地group统计了。
      

  6.   

    嗯,也许程序中所有group字段都应该写为“[group]”更保险,以免与“group”关键字重复造成SQL Server解释错误。或者你把group字段统统换一个名字!