--如果表存在,则删除
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tb1]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tb1]
GO
--建表
CREATE TABLE [dbo].[tb1] (
[单位] [varchar] (10),
[商品] [varchar] (8) COLLATE Chinese_PRC_CI_AS NULL ,
[数量] [int]
) ON [PRIMARY]
GO
--添加数据
insert tb1 select '文昌店','铅笔',  10
union  all select '文昌店','钢笔',  11 
union  all select '文昌店','圆珠笔',12
union  all select '文昌店','铅笔',  15
union  all select '昌龙店','铅笔',  13
union  all select '长兴店','钢笔',  14
go
select * from tb1
go

解决方案 »

  1.   

    给你个例子://///////////////////一个统计动态列的例子///////////////
    --测试数据create table 表abcd (name varchar(20),sub varchar(20),grade int)
    insert 表abcd select '张三','语文',62
    union all select '李四','数学',73
    union all select '张三','数学',87
    union all select '王五','英语',69
    union all select '李四','英语',80create table 表efgh (name varchar(20),commissary varchar(10))
    insert 表efgh select '张三','yes'
    union all select '李四','no'
    union all select '王五','no'--查询处理1declare @sql varchar(8000)
    set @sql='select b.name'
    select  @sql = @sql + ',isnull((select grade from 表abcd c where c.name=b.name and c.sub='''+a.sub+''' ),'''') as ' + a.sub + ' '
    from (select distinct sub from [表abcd]) a
    set @sql=@sql+',总分=('+'case  e.commissary when '+'''yes'''+' then (select sum(grade)  from 表abcd d where d.name=b.name)+10 else (select sum(grade)  from 表abcd d where d.name=b.name) end)'
    set @sql=@sql+' from [表abcd] b  join 表efgh e on b.name=e.name group by b.name,e.commissary'
    print @sql
    exec (@sql)---查询处理2
    declare @sql varchar(8000)
    set @sql='select b.name'
    select  @sql = @sql + ',(select grade from 表abcd c where c.name=b.name and c.sub='''+a.sub+''' ) as ' + a.sub + ' '
    from (select distinct sub from [表abcd]) a
    set @sql=@sql+',总分='+'(select sum(grade)+max(case e.commissary when ''yes''then 10 else 0 end)  from 表abcd d join 表efgh e on d.name=e.name where d.name=b.name)'
    set @sql=@sql+' from [表abcd] b  group by b.name '
    print @sql
    exec (@sql)--结果name     数学   英语   语文   总分
    李四      73     80    0     153
    王五      0      69    0     69
    张三      87     0     62    149
      

  2.   

    declare @sqlstr varchar(8000)
    set @sqlstr = 'select 单位, '
    select @sqlstr = @sqlstr + 'sum(case 商品 when ''' + 商品 + ''' then 数量 end) as ' + 商品 + ', '
    from (select distinct 商品 from tb1) as aset @sqlstr = left(@sqlstr, len(@sqlstr) - 1) + ' from tb1 group by 单位'
    exec(@sqlstr)
      

  3.   

    dulei115() 答的不错谁能给说一下简单的思路啊