表 Table1
列:  Date       PdtNo  Qty Price Amt
记录:2002-09-22  A03   10  60.00 600.00
     2002-09-22  A01   20  20.00 400.00
     2002-09-22  A03   30  50.00 1500.00
     .
     .
需要统计成如下形式
                                   Rate1    Rate2   
     A01   20    20.00  400.00     33.33%     16%
     A03   40    60.00  2100.00    66.66%     84%
说明:
1. 按PdtNo字段分组求和 Qty字段.
2. Price字段不需要计算,只是随机取一笔就行。
3. Rate1表示 数量/总数 所占百分比 如:A01 20/60
4. Rate2表示 金额/总金额 所占百分比 如: A01 400/2500
以上要求能否在一个SQL语句中实现?估计不太容易吧。欢迎进来讨论。

解决方案 »

  1.   

    select pdtno, sum(qty), price, sum(amt)
      , sum(qty)/(select sum(qty) from xxx) as rate1
      , sum(amt)/(select sum(amt) from xxx) as rate2
      from xxxx
      group by pdtno我没试验过,但是思路大致如此
      

  2.   

    楼上的有问题,应该:
    select pdtno, sum(qty), max(price) as maxpice, sum(amt) as amt
      , cast(sum(qty) as decimal)/(select sum(qty) from table1) as rate1
      , sum(amt)/(select sum(amt) from table1) as rate2
      from table1
      group by pdtno不过这个查询效率很低 :)
      

  3.   

    也许这样能够更快一点。
    declare @total_qty numeric(9,4),@total_amt decimal numeric(9,4)
    set @total_qty=(select sum(qty) from table)
    set @total_amt=(select sum(amt) from table)select pdtno, sum(qty), max(price) as maxpice, sum(amt) as amt
      , sum(qty)/@total_qty as rate1
      , sum(amt)/@total_qyt as rate2
      from table1
      group by pdtno我没有比过速度,但我想肯定能快一些。因为这里的子查询应该相对于每一行都要执行。所以速度会慢一些。