CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3--合并处理
SELECT col1,col2=CAST(col2 as varchar(100)) 
INTO #t FROM tb
ORDER BY col1,col2
DECLARE @col1 varchar(10),@col2 varchar(100)
UPDATE #t SET 
       @col2=CASE WHEN @col1=col1 THEN @col2+','+col2 ELSE col2 END, <--请问:能帮我解释下这个update语句吗?看
       @col1 =col1,                                                         不懂那参数是怎么回事??哭~
       col1 = @col1,
       col2=@col2

SELECT * FROM #t
谢谢了~~

解决方案 »

  1.   

    UPDATE #t SET
          @col2=CASE WHEN @col1=col1 THEN @col2+','+col2 ELSE col2 END, <--请问:能帮我解释下这个update语句吗?看
          @col1 =col1,                                                        不懂那参数是怎么回事??哭~
          col1 = @col1,
          col2=@col2
    -----------------------------------------------------
    你可以理解为以上几步是顺序执行的,就好像普通的编程语言一样。
    先根据条件为变量@col2/@col1赋值,然后再赋给表字段执行更新。
      

  2.   

    这是个变量参与的update语句你可以这么理解:
     update是自动有个循环一条一条更新的,你可以用变量把中间值暂存,并用于计算需要跟新的字段值
      

  3.   

    你这里理解:初始
        @col1=null
       @col2=null    
    第1条数据
         @col2=CASE WHEN @col1=col1 THEN @col2+','+col2 ELSE col2 END,     结果 :@col2=col2='1'  因为 @col1=col1不成立
          @col1 =col1,                                                     结果 :@col1=col1='a'
          col1 = @col1,                                                    结果 :col1=@col1='a'
          col2=@col2                                                      结果 :col2=@col2='1'第2条数据
         @col2=CASE WHEN @col1=col1 THEN @col2+','+col2 ELSE col2 END,     结果 :@col2=@col2+','+col2='1'+','+'2'='1,2'  因为 @col1=col1成立
          @col1 =col1,                                                     结果 :@col1=col1='a'
          col1 = @col1,                                                    结果 :col1=@col1='a'
          col2=@col2                                                      结果 :col2=@col2='1,2'第3条数据
         @col2=CASE WHEN @col1=col1 THEN @col2+','+col2 ELSE col2 END,     结果 :@col2=col2='1'  因为 @col1=col1不成立
          @col1 =col1,                                                     结果 :@col1=col1='b'
          col1 = @col1,                                                    结果 :col1=@col1='b'
          col2=@col2                                                      结果 :col2=@col2='1'下面的与第2条相同
        
      

  4.   

    declare @t table(col1 varchar(10),col2 varchar(10))
    insert @t select 1,2
    insert @t select 1,3
    DECLARE @col1 varchar(10),@col2 varchar(100) 
    UPDATE @t SET @col2=CASE WHEN @col1=col1 THEN @col2+','+col2 ELSE col2 END, --此時@col1<>col1 @col2=@col2
          @col1 =col1, --此時為@col1賦值 @col1=1                                                    
          col1 = @col1, 
          col2=@col2 --繼續回去循環判斷,直到循環結束
    select * from @t
    /*col1       col2       
    ---------- ---------- 
    1          2
    1          2,3*/