比如:
+-----------A表-------------+       +-----------B表-------------+
  a   |   b   |   c   |   d           e   |   f   |   g   |   h
+---------------------------+       +---------------------------+
  11     163      0       0           21     163      11      0 
+---------------------------+         22     163      11      0
                                      23     163      11      0
                                    +---------------------------+执行完update语句后为:
+-----------A表-------------+       +-----------B表-------------+
  a   |   b   |   c   |   d           e   |   f   |   g   |   h
+---------------------------+       +---------------------------+
  11     163   21,22,23   0           21     163      11      0 
+---------------------------+         22     163      11      0
                                      23     163      11      0
                                    +---------------------------+能实现吗?语句越精简越好,最好能一句解决,急!!!高人指点一下!

解决方案 »

  1.   


    --2005/2008
    declare @a table
    (
    a int,
    b int,
    c varchar(20),
    d varchar(20)
    )declare @b table
    (
    e varchar(20),
    f int,
    g int,
    h varchar(20)
    )insert @a select 11,163,'0','0'insert @b select '21',163,11,'0'
    union all select '22',163,11,'0'
    union all select '23',163,11,'0'update aa
    set c = stuff((
    select
    ',' + e 
    from @b
    for xml path('')
    ),1,1,'')
    from @a aaselect * from @a
    /**
    11 163 21,22,23 0
    **/
      

  2.   

    declare @a table
    (
    a int,
    b int,
    c varchar(20),
    d varchar(20)
    )declare @b table
    (
    e varchar(20),
    f int,
    g int,
    h varchar(20)
    )insert @a select 11,163,'0','0'insert @b select '21',163,11,'0'
    union all select '22',163,11,'0'
    union all select '23',163,11,'0'update aa
    set c = stuff((
    select
    ',' + e 
    from @b
    where g = aa.a                     --这里忘加上关联条件
    and f = aa.b
    for xml path('')
    ),1,1,'')
    from @a aaselect * from @a
      

  3.   

    楼上是2005的方法,2000得使用函数,参考如下:
    合并列值
    原著:邹建
    改编:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)  2007-12-16  广东深圳表结构,数据如下:
    id    value
    ----- ------
    1     aa
    1     bb
    2     aaa
    2     bbb
    2     ccc需要得到结果:
    id     values
    ------ -----------
    1      aa,bb
    2      aaa,bbb,ccc
    即:group by id, 求 value 的和(字符串相加)1. 旧的解决方法(在sql server 2000中只能用函数解决。)
    --1. 创建处理函数
    create table tb(id int, value varchar(10))
    insert into tb values(1, 'aa')
    insert into tb values(1, 'bb')
    insert into tb values(2, 'aaa')
    insert into tb values(2, 'bbb')
    insert into tb values(2, 'ccc')
    goCREATE FUNCTION dbo.f_str(@id int)
    RETURNS varchar(8000)
    AS
    BEGIN
        DECLARE @r varchar(8000)
        SET @r = ''
        SELECT @r = @r + ',' + value FROM tb WHERE id=@id
        RETURN STUFF(@r, 1, 1, '')
    END
    GO-- 调用函数
    SELECt id, value = dbo.f_str(id) FROM tb GROUP BY iddrop table tb
    drop function dbo.f_str/*
    id          value      
    ----------- -----------
    1           aa,bb
    2           aaa,bbb,ccc
    (所影响的行数为 2 行)
    */--2、另外一种函数.
    create table tb(id int, value varchar(10))
    insert into tb values(1, 'aa')
    insert into tb values(1, 'bb')
    insert into tb values(2, 'aaa')
    insert into tb values(2, 'bbb')
    insert into tb values(2, 'ccc')
    go--创建一个合并的函数
    create function f_hb(@id int)
    returns varchar(8000)
    as
    begin
      declare @str varchar(8000)
      set @str = ''
      select @str = @str + ',' + cast(value as varchar) from tb where id = @id
      set @str = right(@str , len(@str) - 1)
      return(@str)
    End
    go--调用自定义函数得到结果:
    select distinct id ,dbo.f_hb(id) as value from tbdrop table tb
    drop function dbo.f_hb/*
    id          value      
    ----------- -----------
    1           aa,bb
    2           aaa,bbb,ccc
    (所影响的行数为 2 行)
    */2. 新的解决方法(在sql server 2005中用OUTER APPLY等解决。)
    create table tb(id int, value varchar(10))
    insert into tb values(1, 'aa')
    insert into tb values(1, 'bb')
    insert into tb values(2, 'aaa')
    insert into tb values(2, 'bbb')
    insert into tb values(2, 'ccc')
    go
    -- 查询处理
    SELECT * FROM(SELECT DISTINCT id FROM tb)A OUTER APPLY(
            SELECT [values]= STUFF(REPLACE(REPLACE(
                (
                    SELECT value FROM tb N
                    WHERE id = A.id
                    FOR XML AUTO
                ), '<N value="', ','), '"/>', ''), 1, 1, '')
    )N
    drop table tb/*
    id          values
    ----------- -----------
    1           aa,bb
    2           aaa,bbb,ccc(2 行受影响)
    */--SQL2005中的方法2
    create table tb(id int, value varchar(10))
    insert into tb values(1, 'aa')
    insert into tb values(1, 'bb')
    insert into tb values(2, 'aaa')
    insert into tb values(2, 'bbb')
    insert into tb values(2, 'ccc')
    goselect id, [values]=stuff((select ','+[value] from tb t where id=tb.id for xml path('')), 1, 1, '')
    from tb
    group by id/*
    id          values
    ----------- --------------------
    1           aa,bb
    2           aaa,bbb,ccc(2 row(s) affected)*/drop table tb
      

  4.   


    无效的 SQL语句;期待 'DELETE'、'INSERT'、'PROCEDURE'、'SELECT'、或 'UPDATE'。-.-!能不先不考虑关联什么的,什么都不考虑,就是直接取B表字段a各列数据,update到A表字段c里,格式为x,y,z,...
      

  5.   


    -.-! 我菜菜嘛,主要是那程序不能像SQL查询分析器那样用的,他只能一行一行执行,而且语句必需要以 'DELETE'、'INSERT'、'PROCEDURE'、'SELECT'、或 'UPDATE' 开头。
      

  6.   

    慢慢看吧,声明临时表什么的是SQL必学的吧,多看别人写的代码对自己能有很大提高的。。况且程序都是一段一段的,都有关联性,不可能一句命令生成一个WINDOW XP吧,方便是要留给客户
      

  7.   


    -.-! 我操作的是 ACCESS 不是 MSSQL -.-!那是不是不能实现了?