N_Chow 好几天没来了。
主要是理解一下这一句:
update @processTable 
SET @z=value=CASE WHEN @q=id THEN @z else ''  end +value +',',
       @q=@q+Case WHEN @q=ID THEN 0 ELSE 1 end,
        @step=ProcessStep=@Step+1
from @processTable1.: @step=ProcessStep=@Step+1
@step加一后给ProcessStep,同时给自已
相当于:C的:ProcessStep=++@Step
2.
@q=@q+Case WHEN @q=ID THEN 0 ELSE 1 end
@q如果与ID同值,则不变否则加1
3`
@z=value=CASE WHEN @q=id THEN @z else ''  end +value +',',功能综合上面两点
这是UPDATE的特殊用法。

解决方案 »

  1.   

    这一句改成这样可能好一些:
    update @processTable 
    SET @z=value=CASE WHEN @q=id THEN @z else ''  end +value +',',
           @q=@Case WHEN @q=ID THEN @q ELSE ID end,
            @step=ProcessStep=@Step+1
    from @processTable
      

  2.   

    asd其实只要理解了update语句的特殊用法的关键就很清楚了。
    通常的update语句是:update a set c1 = 1 where id = 1
    但可以在修改的同时给变量赋值:update a set @i = c1 = 1 where id = 1;这时@i=1。
    如果再变化一下:update a set @i = c1 = @i + 1 where id = 1;就相当于先给id=1的c1字段赋值为@i+1,然后再将@i赋值为@i+1。
    最后去掉where条件,就成了一个生成由1到表记录数之间的连续自然数的绝佳语句。不知道飘香从哪弄来的,这个语句的确经典!
      

  3.   

    先给个测试数据,大家看看是不是有问题
    declare @YourResultTable  table (id int, value varchar(10))
    insert @YourResultTable  values(1,        'cool')
    insert @YourResultTable  values(1,        'nice')
    insert @YourResultTable  values(1,        'wow')
    insert @YourResultTable  values(2,        'cool')
    insert @YourResultTable  values(2,        'wow')
    insert @YourResultTable  values(4,        'nice')
    insert @YourResultTable  values(6,        'cool')
    insert @YourResultTable  values(6,        'nice')
      

  4.   

    然后看看我修改后的:set nocount on
    declare @YourResultTable  table (id int, value varchar(10))
    insert @YourResultTable  values(1,        'cool')
    insert @YourResultTable  values(1,        'nice')
    insert @YourResultTable  values(1,        'wow')
    insert @YourResultTable  values(2,        'cool')
    insert @YourResultTable  values(2,        'wow')
    insert @YourResultTable  values(4,        'nice')
    insert @YourResultTable  values(6,        'cool')
    insert @YourResultTable  values(6,        'nice')--select * from @YourResultTabledeclare @z varchar(100),@q int
    select   @q = 0declare @ProcessTable table (id int, value varchar(100))
    insert @ProcessTable
     select id, value
     from  @YourResultTable
     order by id, valueupdate  @ProcessTable
     set  @z = value = case @q when id then @z else '' end + value +
    ',' ,  @q = id 
     from  @ProcessTable
    --select * from @ProcessTableselect  id,max(value) from @ProcessTable group by idset nocount off
      

  5.   

    同意j9988(j9988) ,我的意思和下面的一致这一句改成这样可能好一些:
    update @processTable 
    SET @z=value=CASE WHEN @q=id THEN @z else ''  end +value +',',
           @q=@Case WHEN @q=ID THEN @q ELSE ID end,
            @step=ProcessStep=@Step+1
    from @processTable
      

  6.   

    再改成字符型:set nocount on
    declare @YourResultTable  table (id varchar(2), value varchar(10))
    insert @YourResultTable  values('1',        'cool')
    insert @YourResultTable  values('1',        'nice')
    insert @YourResultTable  values('1',        'wow')
    insert @YourResultTable  values('2',        'cool')
    insert @YourResultTable  values('2',        'wow')
    insert @YourResultTable  values('4',        'nice')
    insert @YourResultTable  values('6',        'cool')
    insert @YourResultTable  values('6',        'nice')--select * from @YourResultTabledeclare @z varchar(100),@q varchar(2)
    select  @q = nulldeclare @ProcessTable table (id varchar(2), value varchar(100))
    insert @ProcessTable  
      select id, value  from  @YourResultTable
      order by id, valueupdate  @ProcessTable
      set  @z = value = case @q when id then @z else '' end + value +',' , @q = id 
      from  @ProcessTable
    --select * from @ProcessTableselect  id,max(value) from @ProcessTable group by idset nocount off