执行
 select * from  (
 select a.fid, a.fworkgroup,d.fname AS WORKGROUPMANAGER,b.FPRODUCT,e.fname as PRDNAME,e.fbar as PRDSIZE,B.FSHIPNUM from DC_TRAN_PICKM_HTY a 
 inner join  DC_TRAN_PICKD_HTY b  on a.fid=b.ftran
 inner join zt1sysinfo.dbo.DC_WORKGRPM c on a.fworkgroup=c.fid and c.fver=1
 inner join zt1sysinfo.dbo.emp_list d on c.fdutyman=d.fid and d.fver=1
 inner join zt1sysinfo.dbo.product_list e on  b.fproduct=e.fid and e.xed=1
  ) AA  输出的数据格式如下图http://img126.imagevenue.com/aAfkjfp01fo1i-12289/loc402/27441_Snap3_402lo.jpg
现在我想把数据按照下面此图样式进行输出
http://img109.imagevenue.com/aAfkjfp01fo1i-1521/loc410/27205_Snap1_410lo.jpg其中 如果对应 某个 WORKGROUPMANAGER 有多少个不同 fid,则表示其装车数是多少.例如上图中李黄河的对应的fid有两个不同的,装车数是2,而张宇湘的装车数则是1
总台数表示对应 某个WORKGROUPMANAGER 总共装了多少台,为FSHIPNUM 字段的总和 例如上图中李黄河的总台数是505,而张宇湘的总台数是111最后能够按照尺寸的横排方式输出
求高人点拨!!!!!!

解决方案 »

  1.   

    有人说图看不到,我再发一道第一张http://www.chengan.cn/bbs/UploadFile/2006-7/20067190543060529.jpg第二张
    http://www.chengan.cn/bbs/UploadFile/2006-7/20067190543991135.jpg
      

  2.   

    用存储过程生成动态sql语句
    insert into #T 
    select * from  (
     select a.fid, a.fworkgroup,d.fname AS WORKGROUPMANAGER,b.FPRODUCT,e.fname as PRDNAME,e.fbar as PRDSIZE,B.FSHIPNUM from DC_TRAN_PICKM_HTY a 
     inner join  DC_TRAN_PICKD_HTY b  on a.fid=b.ftran
     inner join zt1sysinfo.dbo.DC_WORKGRPM c on a.fworkgroup=c.fid and c.fver=1
     inner join zt1sysinfo.dbo.emp_list d on c.fdutyman=d.fid and d.fver=1
     inner join zt1sysinfo.dbo.product_list e on  b.fproduct=e.fid and e.xed=1
      ) AA  
    declare @strsql varchar(8000)
    set @strsql = ''
    select @strsql = @strsql + '(select sum(FSHIPNUM) from #T t1 where  t1.workgroupmanager=#T.workgroupmanager and t1.PRDSIZE = ''' + #T.PRDSIZE + ''')' + #T.PRDSIZE + ',' from #T  
    set @strsql = 'select workgroupmanager,(select count(1) from (select distinct fid from #T t1 where t1.workgroupmanager=#T.workgroupmanager) a) 装车数,' + @strsql
    set @strsql = @strsql + 'sum(FSHIPNUM) 总台数 from #T group by workgroupmanager '
    exec(@strsql)
    drop table #T
    没明白占位数是什么意思,自己加吧
      

  3.   

    把 drop table #T 去掉
      

  4.   

    谢谢,不过我没有看懂注意第二张
    http://www.chengan.cn/bbs/UploadFile/2006-7/20067190543991135.jpg
    图最后一行有一个合计,这个能够实现么 ??/
      

  5.   

    可以实现,你有数据库可以在分析器里试验一下
    但生成的sql语句不能超过8000个字符
      

  6.   

    对不起,前面发的有点错误,改正下:
    select * into #T from  (
     select a.fid, a.fworkgroup,d.fname AS WORKGROUPMANAGER,b.FPRODUCT,e.fname as PRDNAME,e.fbar as PRDSIZE,B.FSHIPNUM from DC_TRAN_PICKM_HTY a 
     inner join  DC_TRAN_PICKD_HTY b  on a.fid=b.ftran
     inner join zt1sysinfo.dbo.DC_WORKGRPM c on a.fworkgroup=c.fid and c.fver=1
     inner join zt1sysinfo.dbo.emp_list d on c.fdutyman=d.fid and d.fver=1
     inner join zt1sysinfo.dbo.product_list e on  b.fproduct=e.fid and e.xed=1
      ) AA  
    declare @strsql varchar(8000)
    set @strsql = ''
    select @strsql = @strsql + '(select sum(FSHIPNUM) from #T t1 where  t1.workgroupmanager=#T.workgroupmanager and t1.PRDSIZE = ''' + a.PRDSIZE + ''')' + a.PRDSIZE + ',' from (select distinct PRDSIZE from #T) a 
    set @strsql = 'select workgroupmanager,(select count(1) from (select distinct fid from #T t1 where t1.workgroupmanager=#T.workgroupmanager) a) 装车数,' + @strsql
    set @strsql = @strsql + 'sum(FSHIPNUM) 总台数 from #T group by workgroupmanager '
    exec(@strsql)
    drop table tempdb..#T
      

  7.   

    刚执行你给的最新的语句
    SQL查询分析器提示有错
    (所影响的行数为 7 行)服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: '14' 附近有语法错误。
      

  8.   


    select @strsql = @strsql + '(select sum(FSHIPNUM) from #T t1 where  t1.workgroupmanager=#T.workgroupmanager and t1.PRDSIZE = ''' + a.PRDSIZE + ''')' + a.PRDSIZE + ',' from (select distinct PRDSIZE from #T) a 
    改成
    select @strsql = @strsql + '(select sum(FSHIPNUM) from #T t1 where  t1.workgroupmanager=#T.workgroupmanager and t1.PRDSIZE = ''' + a.PRDSIZE + ''') [' + a.PRDSIZE + '],' from (select distinct PRDSIZE from #T) a 这是因为 sql分析器不自动识别 14" 为列名的原因
      

  9.   

    to zsforever(虎虎) 谢谢你的回答,不过我查询出来的结果还是不符合要求你看这个图http://www.chengan.cn/bbs/UploadFile/2006-7/200671920431461954.jpg
      

  10.   

    sorry,再看看这个吧,没有数据所以不帮你测试了(这不是非常优化的写法,但很好理解:))
    select * into #T from  (
     select a.fid, a.fworkgroup,d.fname AS WORKGROUPMANAGER,b.FPRODUCT,e.fname as PRDNAME,e.fbar as PRDSIZE,B.FSHIPNUM from DC_TRAN_PICKM_HTY a 
     inner join  DC_TRAN_PICKD_HTY b  on a.fid=b.ftran
     inner join zt1sysinfo.dbo.DC_WORKGRPM c on a.fworkgroup=c.fid and c.fver=1
     inner join zt1sysinfo.dbo.emp_list d on c.fdutyman=d.fid and d.fver=1
     inner join zt1sysinfo.dbo.product_list e on  b.fproduct=e.fid and e.xed=1
      ) AA  
    declare @strsql varchar(8000)
    set @strsql = ''
    select @strsql = @strsql + '(select sum(FSHIPNUM) from #T t1 where  t1.workgroupmanager=#T.workgroupmanager and t1.PRDSIZE = ''' + a.PRDSIZE + ''')' + a.PRDSIZE + ',' from (select distinct PRDSIZE from #T) a 
    set @strsql = 'select distinct workgroupmanager,(select count(1) from (select distinct fid from #T t1 where t1.workgroupmanager=#T.workgroupmanager) a) 装车数,' + @strsql
    set @strsql = @strsql + '(select sum(FSHIPNUM) from #T t1 where  t1.workgroupmanager=#T.workgroupmanager) 总台数 from #T '
    exec(@strsql)
    drop table tempdb..#T
      

  11.   

    上面那个的列名有问题,再看看这个吧,没有数据所以不帮你测试了(这不是非常优化的写法,但很好理解:))
    select * into #T from  (
     select a.fid, a.fworkgroup,d.fname AS WORKGROUPMANAGER,b.FPRODUCT,e.fname as PRDNAME,e.fbar as PRDSIZE,B.FSHIPNUM from DC_TRAN_PICKM_HTY a 
     inner join  DC_TRAN_PICKD_HTY b  on a.fid=b.ftran
     inner join zt1sysinfo.dbo.DC_WORKGRPM c on a.fworkgroup=c.fid and c.fver=1
     inner join zt1sysinfo.dbo.emp_list d on c.fdutyman=d.fid and d.fver=1
     inner join zt1sysinfo.dbo.product_list e on  b.fproduct=e.fid and e.xed=1
      ) AA  
    declare @strsql varchar(8000)
    set @strsql = ''
    select @strsql = @strsql + '(select sum(FSHIPNUM) from #T t1 where  t1.workgroupmanager=#T.workgroupmanager and t1.PRDSIZE = ''' + a.PRDSIZE + ''') [' + a.PRDSIZE + '],' from (select distinct PRDSIZE from #T) a 
    set @strsql = 'select distinct workgroupmanager,(select count(1) from (select distinct fid from #T t1 where t1.workgroupmanager=#T.workgroupmanager) a) 装车数,' + @strsql
    set @strsql = @strsql + '(select sum(FSHIPNUM) from #T t1 where  t1.workgroupmanager=#T.workgroupmanager) 总台数 from #T '
    exec(@strsql)
    drop table tempdb..#T
      

  12.   


     http://www.chengan.cn/bbs/UploadFile/2006-7/20067201263952641.jpg 执行的结果出来了  非常感谢^_^ ps.所谓优化的写法是怎样的了,这个也是我要面对的问题呀
      

  13.   

    哦,还想请教下drop table tempdb..#T
    和drop table #T
    有什么区别
    上面那个会出现忽略了数据库名称 'tempdb',将引用 tempdb 中的对象。的提示
      

  14.   

    1、可以用group by 句型改写,但效率具体怎么样我也不太清楚(我用的方法自己感觉更灵活,但就是语句太长)
    2、所有删除都可以写成 drop table 数据库名.dbo(所有者名).表名
    #T 不存在与当前数据库而是在系统临时库tempdb中
    如果删除表在当前库 drop table 数据库名.dbo(所有者名).表名 和drop table 表名 是一样的