各位高手,小弟又来求助了
有一张表 tb1     col1 col2 col3
                 1.29 0.69 2.27
                 2.1 0.39 2.29
                 2.29 0.69 2.27我想达到这样一个过程:查询第一条记录,把每个值存储起来,然后查询下一条记录的时候比较每一列的值和前一条记录的相应的列值谁大,存储大的那个值,比如第二条记录扫描后,col1比第一条记录大就取2.1  col2比第一条小保留0.69 col3比第一条大取2.29 怎么实现? 

解决方案 »

  1.   

    Select Max(Col1),Max(Col2),Max(Col3) From T
    这样不就行了吗
      

  2.   


    declare @n varchar(200)
    declare @id varchar(200)                    
    declare @a varchar(200)
    declare @get varchar(8000)
    set @n =1
    while @n < 5
    begin
    set @id = 1
    while @id < 5
    beginselect @a=name from syscolumns where id = object_id('tb_temp') and colorder =@id
    exec('select ' +@a+ ' from tb_temp where 行号 ='+@n)set @id = @id+1
    end
    set @n = @n +1
    set @id = 1
    end请问如果这样的代码,我想把第一次得到的@a存储起来,以便下一次循环的时候和前一次的@a做比较,应该怎么写
      

  3.   

    你要哪个区段的值,就直接在语句后面通过WHERE子句来划分不就行了?
    比如1到10,那么就select max(col1),max(col2),max(col3) from tb1 where id>1 and id<=10
    用游标不是不可以,但是效率问题你还是要考虑的吧
      

  4.   


    就是那个400多列的表,我想先用个小表做测试 tb1  行号 col1 col2 col3
                                                1  1.29 0.69 2.27
                                                2  2.1 0.39 2.29
                                                3  2.29 0.69 2.27declare @n varchar(200)
    declare @id varchar(200)                    
    declare @a varchar(200)
    declare @get varchar(8000)
    set @n =1
    while @n < 5
    begin
    set @id = 1
    while @id < 5
    beginselect @a=name from syscolumns where id = object_id('tb_temp') and colorder =@id
    exec('select ' +@a+ ' from tb_temp where 行号 ='+@n)set @id = @id+1
    end
    set @n = @n +1
    set @id = 1
    end这样后能得到每一个单元格的值,我现在想把每次exec('select ' +@a+ ' from tb_temp where 行号 ='+@n)的值保存下来,供下一次数据比较
      

  5.   

    可以建一个临时表,存储单元格的信息。create table #tb(unitName varchar(100),val int)后边可以insert into #tb exec('select ' +@n+','+ @a + ' from tb_temp where 行号 ='+@n)
      

  6.   

    如果用update语句使用exec应该怎么写