表table1的字段ID和table2的字段ID相关联。table2里可能查询出几条记录,现在想把所有从table2里查询出来的记录合并到一条记录里,这样的SQL语句怎么写呢?
例如
table1
  ID
   1table2
  ID   city
  1   beijing
  1   shanghai要达到的效果是city
beijing、shanghai中间还要加顿号
这样的要求SQL语句能能实现啊

解决方案 »

  1.   

    别想了还是写循环吧,SQL实现不了
      

  2.   

    to jianshenrun:
    真的就没有办法实现吗?
      

  3.   

    这样试试
    select table2.city from table1,table2 where table1.id=table2.id
      

  4.   

    写一个存储过程,
    --先建与table2结构相同的临时表tmp_tab
    --其中tmp_tab的city字段设为varchar类型create procedure test
    as
    declare @id_no char(10)
    declare @vcity varchar(10)
    declare @tcity varchar(100)

    --定义游标
    Declare cur1 cursor  for
    select  ID  
    from table1  OPEN cuR1
    WHILE (@@FETCH_STATUS = 0) 
    BEGIN
    FETCH NEXT FROM cur1
    INTO @id_no Declare cur2 cursor  for
    select  city  
    from table2
    where ID=@id_no
     
    select @tcity=''
    OPEN cur2
    WHILE (@@FETCH_STATUS = 0) 
    BEGIN
    FETCH NEXT FROM cur2
    INTO @vcity

    if (@tcity='') and (@vcity<>'')
    begin
    select @tcity=@vcity
    select @vcity=''
    end
    else if @vcity<>''  
    select @tcity=@tcity+'、'+@vcity
    END
    CLOSE cur2
    DEALLOCATE cur2

    if @tcity<>'' 
    insert tmp_tab(ID,city) values(@id_no,@tcity)
    END
    CLOSE cur1
    DEALLOCATE cur1
    GO
      

  5.   

    有些情况不是使用循环就可以解决问题的,如果我使用循环,问题会变得非常复杂。所以才要求用SQL来实现。
      

  6.   

    以下语句可以完成!declare @S varchar(8000)
    set @S=''
    select @S=@S  +b.col+'、' from table1 a left join table2 b on a.id=b.id
    set @S=Left(@S,len(@S)-1)
    select @S
      

  7.   

    to tingquan:
    不好意思,刚刚结帖了,如果我试过你的也可以,另外开帖补上!!谢谢!!
      

  8.   

    oh,结帖太快了,mzyp2002(雪刀浪子)的方法有点问题,两个游@@FETCH_STATUS系统变量都有影响,这样的处理结果是不对的。