ID       编号     名称     单价      姓名    数量
1 1 铅笔 1.5 管理员1 2
2 1 铅笔 1.5 管理员2 2
3 2 钢笔 15 管理员1 3
4 2 钢笔 15 管理员2 3
5 1 铅笔 1.5 管理员3 2
要的结果是:编号     名称     单价      管理员1    管理员2   管理员2
1 铅笔 1.5    2      2        2
2 钢笔 15    3      3        0有这样的sql语句能实现吗?

解决方案 »

  1.   

    以下可参考的例子1、普通多表联合http://topic.csdn.net/u/20100623/00/077055eb-784d-4b27-8407-2c17adc06c60.html?seed=81934135&r=66426155#r_66426155http://topic.csdn.net/u/20100622/19/9710803c-441b-45d0-b010-703a2633fe89.html?471612、多表根据时间 计算序号
    http://topic.csdn.net/u/20100623/12/bbb0921b-0e1b-4435-8e85-959d87844954.html?seed=2145286087&r=66438763#r_66438763
    http://topic.csdn.net/u/20100701/09/1684649b-b893-463b-8b40-7f4b894cd41e.html?seed=205688256&r=66630774#r_66630774 3、财务相关
    http://topic.csdn.net/u/20100626/00/83499112-43ae-4caa-a1fd-268cc5138da6.html?seed=415671352&r=66513615#r_66513615  4、根据行数转列http://topic.csdn.net/u/20100705/12/e325571b-c368-4174-859f-17ae708eca3d.htmlhttp://topic.csdn.net/u/20100706/09/c34728dc-6167-45df-b7cf-974612b9aa8b.htmlhttp://topic.csdn.net/u/20100706/16/f217deed-a2be-4950-b911-2624ac7a881a.html?39445 5、根据排序大小转http://topic.csdn.net/u/20100707/13/63f4a02e-ebc3-4c71-9380-d6b2ca0eb366.html?39970 6、分组排序按序号转http://topic.csdn.net/u/20100725/05/7f813114-c423-4759-97b8-b22e1e2e90d7.html?seed=471594449&r=67220945#r_67220945
      

  2.   

    select * from tb
    pivot
    (max(数量) for 姓名 in(管理员1,管理员2,管理员3))b
      

  3.   

    use Tempdb
    go
    --> --> 
     
    if not object_id(N'Tempdb..#T') is null
    drop table #T
    Go
    Create table #T([ID] int,[编号] int,[名称] nvarchar(2),[单价] decimal(18,1),[姓名] nvarchar(4),[数量] int)
    Insert #T
    select 1,1,N'铅笔',1.5,N'管理员1',2 union all
    select 2,1,N'铅笔',1.5,N'管理员2',2 union all
    select 3,2,N'钢笔',15,N'管理员1',3 union all
    select 4,2,N'钢笔',15,N'管理员2',3 union all
    select 5,1,N'铅笔',1.5,N'管理员3',2
    Go
    declare @s nvarchar(4000)
    set @s=''
    Select     @s=@s+N','+quotename(姓名)+N'=max(case when 姓名=N'+quotename(姓名,'''')+N' then 单价 else 0 end)'from #T group by 姓名
    --顯示生成語句
    print N'select 编号,名称'+@s+N' from #T group by 编号,名称'exec(N'select 编号,名称'+@s+N' from #T group by 编号,名称 order by 1')go
    /*
    编号 名称 管理员1 管理员2 管理员3
    1 铅笔 1.5 1.5 1.5
    2 钢笔 15.0 15.0 0.0
    */