现在有这样一种表:
产品规格     发货量    月份
S001        100      01
S001        200      01
S001        100      02
S002        300      01
S002        200      03
现在需要达到这样的要求,按照产品规格和月份进行汇总,如下:
产品规格     一月发货量    二月发货量    三月发货量 。十二月发货量
S001         300           100
S002         300                      200
就是说得把列转换成行,利用php数组应该怎样实现这样的算法啊,,望大家帮帮忙啊!!谢了!!

解决方案 »

  1.   

    select sum( 发货量 ) as sum from table group by 月份 order by 产品规格
      

  2.   


    如果这样写的话,只能达到这样的效果:
    产品规格    发货量     月份
    S001       300       01
    S001       100       02
    S002       300       01
    s002       200       03
    但我需要把月份转换成行显示!!!
      

  3.   

    select 产品规格, sum( 发货量 ) as 发货量, 月份 from table group by 月份 order by 产品规格得到这样的结果: 
    产品规格    发货量    月份 
    S001      300      01 
    S001      100      02 
    S002      300      01 
    s002      200      03 读取结果并处理(设数据库为mysql)
    while($r = mysql_fetch_assoc($rs)) {
      $out[$r['产品规格']][$r['月份']] += $r['发货量'];
    }输出
    foreach($out as $k=>$v) {
      echo $k.",";
      for($i=1;$i<13;$i++) {
        echo $v[sprintf("%02d",$i)] . ',';
      }
      echo '<br />';
    }
      

  4.   


    $out[$r['产品规格']][$r['月份']] += $r['发货量']; 是什么意思??
      

  5.   

    $out[$r['产品规格']][$r['月份']] = $r['发货量']; 
    不好意思,手误:)
      

  6.   


    建议楼主采用 SQL:SELECT 产品规格,SUM(数量) AS SUM,月份 FROM PRODUCT GROUP BY 月份, 规格 ORDER BY 规格[/code]
    然后再采用5楼的PHP代码
      

  7.   

    select  case 月份 when 01  then  sum(发货量)   as '一月发货量' end  as 一月份 ,.....      when 02  
      

  8.   


    这种做法,只是仅仅是判断一条记录:比如说S001在一月的发货量是300,在二月的发货量是100,用这个语句的结果集是
    产品规格    一月发货量    二月发货量    三月发货量 。十二月发货量 
    S001        300           
    S001                     100而我需要把他们合并到一行里面去
    产品规格    一月发货量    二月发货量    三月发货量 。十二月发货量 
    S001        300          100 请帮帮忙!!
      

  9.   

    还是应该需要用到5楼的方法,先拿sql语句查询,然后得用php数组循环进行处理,但我没看懂5楼的做法,能说明白一些吗??谢谢!!
      

  10.   

    执行以下代码,应该明白的
    $a = array(
      array('产品规格'=>'S001', '发货量' => 300, '月份' => '01'),
      array('产品规格'=>'S001', '发货量' => 100, '月份' => '02'),
      array('产品规格'=>'S002', '发货量' => 300, '月份' => '01'),
      array('产品规格'=>'s002', '发货量' => 200, '月份' => '03'),
    );foreach($a as $r)
      $out[$r['产品规格']][$r['月份']] += $r['发货量']; print_r($out);foreach($out as $k=>$v) { 
      echo $k.","; 
      for($i=1;$i <13;$i++) { 
        echo $v[sprintf("%02d",$i)] . ','; 
      } 
      echo ' <br />'; 
    } *************
    Array
    (
        [S001] => Array
            (
                [01] => 300
                [02] => 100
            )    [S002] => Array
            (
                [01] => 300
            )    [s002] => Array
            (
                [03] => 200
            ))
    S001,300,100,,,,,,,,,,, 
    S002,300,,,,,,,,,,,, 
    s002,,,200,,,,,,,,,,
      

  11.   

    SELECT 产品规格,sum(sum)发货量,月份 from 表名 group by 产品规格,月份
    我在我机器产试了一下是按你那个输出的,
    最后按五楼的输出就没事了.