源表编号 单位 地址 单号 产品 数量
1205057 顺达食品 黄海南路 98 达利源蛋黄派 24
1205057 顺达食品 黄海南路 98 伊犁纯酸乳 42
1205057 顺达食品 黄海南路 98 康师傅桶面 30
1205057 顺达食品 黄海南路 98 娃哈哈八宝粥 24
结果编号 1205057  单位 顺达食品 地址 黄海南路 单号 98 产品 达利源蛋黄派  数量 24 产品 伊犁纯酸乳  数量 42 产品 康师傅桶面 数量 30 产品 娃哈哈八宝粥  数量 24或 1205057   顺达食品  黄海南路  98  达利源蛋黄派  24  伊犁纯酸乳  42  康师傅桶面  30  娃哈哈八宝粥   24

解决方案 »

  1.   


    --> 测试数据:[test]
    if object_id('[test]') is not null 
    drop table [test]
    create table [test](
    [编号] int,
    [单位] varchar(8),
    [地址] varchar(8),
    [单号] int,
    [产品] varchar(12),
    [数量] int
    )
    insert [test]
    select 1205057,'顺达食品','黄海南路',98,'达利源蛋黄派',24 union all
    select 1205057,'顺达食品','黄海南路',98,'伊犁纯酸乳',42 union all
    select 1205057,'顺达食品','黄海南路',98,'康师傅桶面',30 union all
    select 1205057,'顺达食品','黄海南路',98,'娃哈哈八宝粥',24
    -- 查询处理
    SELECT *FROM (SELECT DISTINCT [编号],[单位],[地址],[单号] FROM [test])A
    OUTER APPLY(
        SELECT 产品和数量= STUFF(REPLACE(REPLACE(
                (   SELECT [产品]+'  '+LTRIM([数量]) as 产品和数量 FROM [test] N
                    WHERE [编号]=A.编号 AND [单位]=A.单位 AND [地址]=A.地址 AND [单号]=A.单号
                    FOR XML AUTO
                 ), '<N 产品和数量"', '  '), '"/>', ''), 1, 1, '')
    )N
    /*
    编号 单位 地址 单号 产品和数量
    1205057 顺达食品 黄海南路 98 N 产品和数量="达利源蛋黄派  24<N 产品和数量="伊犁纯酸乳  42<N 产品和数量="康师傅桶面  30<N 产品和数量="娃哈哈八宝粥  24
    */
      

  2.   


    --> 测试数据:[test]
    if object_id('[test]') is not null 
    drop table [test]
    create table [test](
    [编号] int,
    [单位] varchar(8),
    [地址] varchar(8),
    [单号] int,
    [产品] varchar(12),
    [数量] int
    )
    insert [test]
    select 1205057,'顺达食品','黄海南路',98,'达利源蛋黄派',24 union all
    select 1205057,'顺达食品','黄海南路',98,'伊犁纯酸乳',42 union all
    select 1205057,'顺达食品','黄海南路',98,'康师傅桶面',30 union all
    select 1205057,'顺达食品','黄海南路',98,'娃哈哈八宝粥',24
    -- 查询处理
    SELECT *FROM (SELECT DISTINCT [编号],[单位],[地址],[单号] FROM [test])A
    OUTER APPLY(
        SELECT 产品和数量= STUFF(REPLACE(REPLACE(
                (   SELECT [产品]+'  '+LTRIM([数量]) as VALUE FROM [test] N
                    WHERE [编号]=A.编号 AND [单位]=A.单位 AND [地址]=A.地址 AND [单号]=A.单号
                    FOR XML AUTO
                 ), '<N value="', '  '), '"/>', ''), 1, 1, '')
    )N/*
    编号 单位 地址 单号 产品和数量
    1205057 顺达食品 黄海南路 98  达利源蛋黄派  24  伊犁纯酸乳  42  康师傅桶面  30  娃哈哈八宝粥  24
    */