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
谢谢了~~
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
谢谢了~~
@col2=CASE WHEN @col1=col1 THEN @col2+','+col2 ELSE col2 END, <--请问:能帮我解释下这个update语句吗?看
@col1 =col1, 不懂那参数是怎么回事??哭~
col1 = @col1,
col2=@col2
-----------------------------------------------------
你可以理解为以上几步是顺序执行的,就好像普通的编程语言一样。
先根据条件为变量@col2/@col1赋值,然后再赋给表字段执行更新。
update是自动有个循环一条一条更新的,你可以用变量把中间值暂存,并用于计算需要跟新的字段值
@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条相同
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*/