例如:假设一个表rsda对应如下:BH(编号)   XM(姓名)
001        张三
001        李四
001        小明
002        赵XX
003        孙XX另一个表rsgz如下:(编号唯一)
BH(编号)      GZ(工资)
001           1000
002           2000
003           900希望用一条SELECT语句做成如下结果:bh,xm,gz
001,张三 李四 小明,1000
002,赵XX,2000
003,孙XX,900
请大家帮一下,刚才问了一个现在又是一个问题!谢了

解决方案 »

  1.   

    用函数
    CREATE TABLE rsda([BH] varchar(10), [XM] varchar(10))
    INSERT INTO rsda
        SELECT  '001', '张三'
        UNION ALL SELECT '001', '李四'
        UNION ALL SELECT '001', '小明'
        UNION ALL SELECT '002', '赵XX'
        UNION ALL SELECT '003', '孙XX'
    CREATE TABLE rsgz([BH] varchar(10), [GZ] int)
    INSERT INTO rsgz
        SELECT  '001', 1000
        UNION ALL SELECT '002', 2000
        UNION ALL SELECT '003', 900
    GOCREATE FUNCTION AddStr(@BH VARCHAR(10))
    RETURNS VARCHAR(100)--注意返回值得长度
    AS
    BEGIN
        DECLARE @RE VARCHAR(100)--与返回值长度保持一致
        SET @RE = ''
        SELECT @RE = @RE + XM + ' ' FROM rsda WHERE BH = @BH
        RETURN RTRIM(@RE)
    END
    GOSELECT A.BH + ',' + A.XM + ',' + CAST(B.GZ AS VARCHAR)
    FROM (SELECT DISTINCT BH, dbo.AddStr(BH) AS XM FROM rsgz)A INNER JOIN rsgz B ON A.BH = B.BHDROP FUNCTION AddStr
    DROP TABLE rsgz
    DROP TABLE rsda结果
    001,张三 李四 小,1000
    002,赵X,2000
    003,孙X,900
      

  2.   

    在SQL Server 2000中,最简单的方法就是写一个函数辅助处理。
      

  3.   

    引用一下邹建的文章
    id    value----- ------1     aa1     bb2     aaa2     bbb2     ccc 需要得到结果:id     values------ -----------1      aa,bb2      aaa,bbb,ccc 即, group by id, 求 value 的和(字符串相加) 1. 旧的解决方法-- 1. 创建处理函数CREATE FUNCTION dbo.f_str(@id int)RETURNS varchar(8000)ASBEGIN    DECLARE @r varchar(8000)    SET @r = ''    SELECT @r = @r + ',' + value    FROM tb    WHERE id=@id    RETURN STUFF(@r, 1, 1, '')ENDGO -- 调用函数SELECt id, values=dbo.f_str(id) FROM tb GROUP BY id -- 2. 新的解决方法 -- 示例数据DECLARE @t TABLE(id int, value varchar(10))INSERT @t SELECT 1, 'aa'UNION ALL SELECT 1, 'bb'UNION ALL SELECT 2, 'aaa'UNION ALL SELECT 2, 'bbb'UNION ALL SELECT 2, 'ccc' -- 查询处理SELECT *FROM(    SELECT DISTINCT         id    FROM @t)AOUTER APPLY(    SELECT         [values]= STUFF(REPLACE(REPLACE(            (                SELECT value FROM @t N                WHERE id = A.id                FOR XML AUTO            ), '<N value="', ','), '"/>', ''), 1, 1, ''))N /*--结果id          values----------- ----------------1           aa,bb2           aaa,bbb,ccc (2 行受影响)
      

  4.   

    sql2000必须用函数,sqL2005可以不用
      

  5.   

    sql2000不是必须用函数,也可以使用存储过程进行游标循环,只不过用函数处理最简单罢了。
      

  6.   

    解决了,还是用的hhhdyj(萤火虫) 方法,谢了!我用的如下:CREATE FUNCTION AddStr(@BH VARCHAR(20))
    RETURNS VARCHAR(1000)--注意返回值得长度
    AS
    BEGIN
        DECLARE @RE VARCHAR(100)--与返回值长度保持一致
        SET @RE = ''
        SELECT @RE = @RE + sono + ' ' FROM m_conso WHERE rdno = @BH
        RETURN RTRIM(@RE)
    END
    SELECT rdno, dbo.AddStr(rdno) AS sono,sport FROM m_operation 谢谢各位