适合2005及以上版本:
create table tb(id int, 编号 int, 价格 int, 数量 int,商品说明 varchar(100))insert into tb
select 1  ,101,  1 ,   2    ,'说明1' union all
select 2  ,101,  11,   3    ,'说明2' union all
select 3  ,102,  2 ,   4    ,'说明3' union all
select 4  ,102,  22,   5    ,'说明4'
goselect distinct
       编号,
       stuff((select ','+ 商品说明 +
                     ',价格'+ CAST(价格 as varchar) +
                     ',数量'+ CAST(数量 as varchar) +';'
              from tb t2
              where t1.编号= t2.编号
              for XML path('')
             ),1,1,'') as 内容
from tb t1
/*
编号 内容
101 说明1,价格1,数量2;,说明2,价格11,数量3;
102 说明3,价格2,数量4;,说明4,价格22,数量5;
*/

解决方案 »

  1.   


    --1)創建數據:
    CREATE TABLE test_data (id int,编号 int,价格 int,数量 int,商品说明 VARCHAR(50))INSERT test_data
    SELECT 1,  101,  1,    2,'说明1' UNION ALL
    SELECT 2,  101,  11,   3,'说明2' UNION ALL
    SELECT 3,  102,  2,    4,'说明3' UNION ALL
    SELECT 4,  102,  22,   5,'说明4'--2)創建函數:
    CREATE   FUNCTION [dbo].[f_test] ( )
    RETURNS @t TABLE ( 编号 INT, 内容 VARCHAR(MAX) )
    AS 
        BEGIN   
            INSERT  @t
                    SELECT  编号 ,
                            内容 = STUFF(( SELECT ';' + 商品说明 + ',价格' + RTRIM(价格)
                                                + ',数量' + RTRIM(数量)
                                         FROM   test_data
                                         WHERE  编号 = a.编号
                                       FOR
                                         XML PATH('')
                                       ), 1, 1, '')
                    FROM    test_data a
                    GROUP BY 编号
          
            RETURN   
        END   
        
    --3)執行函數:
    SELECT * FROM dbo.f_test()
      

  2.   


    create table qh
    (id int,编号 int,价格 int,数量 int,商品说明 varchar(10))insert into qh
     select 1,101,1,2,'说明1' union all
     select 2,101,11,3,'说明2' union all
     select 3,102,2,4,'说明3' union all
     select 4,102,22,5,'说明4'
    select a.编号,
           stuff((select '; '+b.商品说明+', '
                        +'价格'+rtrim(b.价格)+', '
                        +'数量'+rtrim(b.数量)
                 from qh b
                 where b.编号=a.编号
                 for xml path('')),1,1,'') '内容'
     from qh a
     group by a.编号/*
    编号          内容
    ----------- --------------------------------------------
    101          说明1, 价格1, 数量2; 说明2, 价格11, 数量3
    102          说明3, 价格2, 数量4; 说明4, 价格22, 数量5(2 row(s) affected)
    */