我有两张表是这样的:一张是订单表,另一张是订单明细表,现在要求在显示时各个商品的数量与订单号显示在同一行(可以理解成同一个表吧),并且显示完成后需要对各个商品的总数进行汇总。如下:订单号      总额        时间        旺旺          美的          海尔
------------------------------------------------------------------------
001245      12000.00    2004-12-20  15            15            15
……        ……        ……        ……          ……          ……
------------------------------------------------------------------------
合计        XXXXXX                  XXXX          XXXXX         XXXXX我的做法是在程序中新建一个表(用.net中的DataSet),结合两张表把数据合并到这个新表中、完了后再循环每条记录汇总。这样好慢,有没有更好的办法!
谢谢!

解决方案 »

  1.   

    --用存储过程写就行了create proc 存储过程名
    as
    set nocount on
    declare @s varchar(8000)
    set @s=''
    select @s=@s+',['+rtrim(商品)+']sum(case b.商品 when '''+rtrim(商品)+''' then b.金额 else 0 end)'
    from 订单明细表 group by 商品
    exec('
    select 订单号=case grouping(a.订单号) when 1 then ''合计'' else a.订单号 end
    ,总额=sum(b.金额)
    ,时间=case grouping(a.订单号) when 1 then '''' else convert(char(10),a.时间,120) end
    '+@s+'
    from 订单表 a,订单明细表 b
    where a.订单号=b.订单号
    group by a.订单号,convert(char(10),a.时间,120) with rollup
    ')
      

  2.   

    --如果只是你的统计要求,用我的存储过程就行了,没有必要建表,调整字段顺序之类--如果是在存储过程中建表/增加字段/调整字段顺序,则参考下面的示例
    create proc p_test
    as
    --建表
    create table tb(id int)--增加字段
    alter table tb add name nvarchar(20)--调整顺序(这个在SQL中是没有语句可以直接做到的,所以直接用select 列表就行了
    --因为新加的字段无法直接生效,所以要用exec
    exec('
    select name,id from tb
    ')
    go--调用
    exec p_test
    go--删除测试
    drop proc p_test
    drop table tb
      

  3.   

    商品需要从表中读取,因为商品只有6个,所以全部读出来,然后在存储过程中循环。能不能做到?例:订单表
    --------------------------------------
    订单号        时间
    ----------------------
    001           20041220
    ----------------------订单明细表
    --------------------------------------------------------
    订单号       商品编号           商品名称      数量
    --------------------------------------------------------
    001          SP-001             美的空调      15
    001          SP-002             海尔空调      15
    001          SP-003             华菱空凋      15
    --------------------------------------------------------商品信息表
    --------------------------------------------------------
    商品编号     名称
    ------------------------
    SP-001       美的空调
    SP-002       海尔空调
    SP-003       华菱空调
    SP-004       三洋电机
    ------------------------查询后需要达到如下效果:
    ----------------------------------------------------------------------------
    订单号        时间     美的空调   海尔空调    华菱空调    三洋电机
    ----------------------------------------------------------------------------
    001           20041220 15         15          15          0   
    ----------------------------------------------------------------------------
    合计                   15         15          15          0
      

  4.   

    create proc #pr_u2
    as
    create table #tb_u2(id int)alter table #tb_u2 add name_n nvarchar(20)exec('
    select name_n,id from #tb_u2
    ')
    goexec #pr_u2
    go