数据库查询结果如下:ID 品名        数量 生产厂家  门店233 I金钱草颗粒 5 重庆 储备柜组1
233 I金钱草颗粒 8 重庆 储备柜组2
233 I金钱草颗粒 4 重庆 储备柜组3
233 I金钱草颗粒 2 重庆 储备柜组4
314 S阿昔洛韦软膏 4 重庆 储备柜组1
314 S阿昔洛韦软膏 3 重庆 储备柜组2
350 S醋酸地塞米松乳膏 1 重庆 储备柜组1
350 S醋酸地塞米松乳膏 2 重庆 储备柜组3
350 S醋酸地塞米松乳膏 3 重庆 储备柜组4
查询结果需打印输出如下格式:ID 品名     储备柜组1数量   储备柜组2数量   储备柜组3数量   储备柜组4数量   合计数量 ...
...
曾重新设计个临时表格式如同输出格式,但重复插入数据有点困难,希望大家给我个解决方案!谢谢!

解决方案 »

  1.   

    create table #
    (ID  int,品名 varchar(100), 数量 int, 生产厂家  varchar(100), 门店 varchar(100))
    insert into # 
    select 233, 'I金钱草颗粒',      5 ,'重庆', '储备柜组1'    union all
    select 233, 'I金钱草颗粒',      8 ,'重庆', '储备柜组2'    union all
    select 233, 'I金钱草颗粒',      4 ,'重庆', '储备柜组3'    union all
    select 233, 'I金钱草颗粒',      2 ,'重庆', '储备柜组4'    union all
    select 314, 'S阿昔洛韦软膏',    4, '重庆', '储备柜组1'    union all
    select 314, 'S阿昔洛韦软膏',    3, '重庆', '储备柜组2'    union all
    select 350, 'S醋酸地塞米松乳膏', 1, '重庆', '储备柜组1'    union all
    select 350, 'S醋酸地塞米松乳膏', 2, '重庆', '储备柜组3'    union all
    select 350, 'S醋酸地塞米松乳膏', 3, '重庆', '储备柜组4' --静态
    select 
    id,
    品名,
    max(case when 门店='储备柜组1' then 数量 else 0 end)as '储备柜组1',
    max(case when 门店='储备柜组2' then 数量 else 0 end)as '储备柜组2',
    max(case when 门店='储备柜组3' then 数量 else 0 end)as '储备柜组3',
    max(case when 门店='储备柜组4' then 数量 else 0 end)as '储备柜组4',
    sum(数量)as '合计'
    from #
    group by 
    id,品名--动态declare @s varchar(1000)
    select @s='select id,品名 '
    select @s=@s+',max(case when 门店='''+门店+''' then 数量 else 0 end)as '''+门店+''''
           from # group by 门店
    select @s=@s+' ,sum(数量)as ''合计'' from # group by id,品名'
    exec(@s)/*
    id          品名                                                                                                   储备柜组1       储备柜组2       储备柜组3       储备柜组4       合计          
    ----------- ---------------------------------------------------------------------------------------------------- ----------- ----------- ----------- ----------- ----------- 
    233         I金钱草颗粒                                                                                               5           8           4           2           19
    314         S阿昔洛韦软膏                                                                                              4           3           0           0           7
    350         S醋酸地塞米松乳膏                                                                                            1           0           2           3           6(所影响的行数为 3 行)*/