select 品名,case when 大号数量> 0 then '大号'+convert(大号数量 as Char) + ','  else '' end + case when 中号数量> 0 then '中号'+convert(中号数量 as Char) + ','  else '' end +case when 小号数量> 0 then '小号'+convert(小号数量 as Char) + ','  else '' end 
from TABLE

解决方案 »

  1.   

    create table A
    (
      [编号] int,
      [品名] varchar(10),
      [大号数量] int,
      [中号数量] int,
      [小号数量] int
    )
    insert A
    select 1,'儿童床',10,2,0 union
    select 2,'木床',3,0,5--测试
    select [品名],
           [数量]=(
                   (case when sum([大号数量])>0 then ' 大号'+convert(varchar,sum([大号数量])) else '' end)+
                   (case when sum([中号数量])>0 then ' 中号'+convert(varchar,sum([中号数量])) else '' end)+
                   (case when sum([小号数量])>0 then ' 小号'+convert(varchar,sum([小号数量])) else '' end)
                  ) 
    from A
    group by [品名]
    --删除测试环境
    drop table A--结果
    /*
    品名         数量           
    ---------- -----------------
    儿童床         大号10 中号2
    木床          大号3 小号5(所影响的行数为 2 行)
    */
      

  2.   

    --用 vivianfdlpw() ( )的方法和思维,和数据
    --测试环境
    create table A
    (
      [编号] int,
      [品名] varchar(10),
      [大号数量] int,
      [中号数量] int,
      [小号数量] int
    )
    insert A
    select 1,'儿童床',10,2,0 union
    select 2,'木床',3,0,5
    --查询
    --测试
    select [品名],
           [数量]=case when([品名])='木床' then convert(varchar(20),sum([大号数量]+[中号数量]+[小号数量])) else (
                   (case when sum([大号数量])>0 then ' 大号'+convert(varchar,sum([大号数量])) else '' end)+
                   (case when sum([中号数量])>0 then ' 中号'+convert(varchar,sum([中号数量])) else '' end)+
                   (case when sum([小号数量])>0 then ' 小号'+convert(varchar,sum([小号数量])) else '' end)
                  )
    End 
    from 表a
    group by [品名]
    --结果
    品名                   数量                                                
    儿童床                大号10 中号2
    木床                   8(所影响的行数为 2 行)