表的格式如下:(数据乱编的)
ID                 PName    PDate             price    Location
41928CF444764 高镁钢 2009-06-27 2160.000 石家庄
41928CF444764 高镁钢 2009-06-26 2160.000 石家庄
41928CF444764 高镁钢 2009-06-25 2160.000 石家庄
41928CF444764 高镁钢 2009-06-24 2160.000 石家庄
41928CF444764 高镁钢 2009-06-23 2160.000 石家庄
41928CF444764 高镁钢 2009-06-27 2330.000 成都
41928CF444764 高镁钢 2009-06-26 2330.000 成都
41928CF444764 高镁钢 2009-06-25 2330.000 成都
41928CF444764 高镁钢 2009-06-24 2330.000 成都
41928CF444764 高镁钢 2009-06-23 2330.000 成都
41928CF444764 高镁钢 2009-06-27 2320.000 南昌
41928CF444764 高镁钢 2009-06-26 2320.000 南昌
41928CF444764 高镁钢 2009-06-25 2320.000 南昌
41928CF444764 高镁钢 2009-06-24 2320.000 南昌
41928CF444764 高镁钢 2009-06-23 2320.000 南昌
3A80FEBCBF3C4 生锗钢 2009-06-27 2020.100 江苏
3A80FEBCBF3C4 生锗钢 2009-06-26 2020.100 江苏
3A80FEBCBF3C4 生锗钢 2009-06-25 2020.100 江苏
3A80FEBCBF3C4 生锗钢 2009-06-24 2020.100 江苏
3A80FEBCBF3C4 生锗钢 2009-06-23 2020.100 江苏
想要得到这样的格式,不知有没有办法一个语句完成?

解决方案 »

  1.   

    http://blog.csdn.net/ACMAIN_CHM/archive/2009/06/19/4283943.aspx
    MySQL交叉表 
      

  2.   

    mysql> select * from t_free212;
    +---------------+--------+------------+-------+----------+
    | ID            | PName  | PDate      | price | Location |
    +---------------+--------+------------+-------+----------+
    | 41928CF444764 | 高镁钢 | 2009-06-27 |  2160 | 石家庄   |
    | 41928CF444764 | 高镁钢 | 2009-06-26 |  2160 | 石家庄   |
    | 41928CF444764 | 高镁钢 | 2009-06-25 |  2160 | 石家庄   |
    | 41928CF444764 | 高镁钢 | 2009-06-24 |  2160 | 石家庄   |
    | 41928CF444764 | 高镁钢 | 2009-06-23 |  2160 | 石家庄   |
    | 41928CF444764 | 高镁钢 | 2009-06-27 |  2330 | 成都     |
    | 41928CF444764 | 高镁钢 | 2009-06-26 |  2330 | 成都     |
    | 41928CF444764 | 高镁钢 | 2009-06-25 |  2330 | 成都     |
    | 41928CF444764 | 高镁钢 | 2009-06-24 |  2330 | 成都     |
    | 41928CF444764 | 高镁钢 | 2009-06-23 |  2330 | 成都     |
    | 41928CF444764 | 高镁钢 | 2009-06-27 |  2320 | 南昌     |
    | 41928CF444764 | 高镁钢 | 2009-06-26 |  2320 | 南昌     |
    | 41928CF444764 | 高镁钢 | 2009-06-25 |  2320 | 南昌     |
    | 41928CF444764 | 高镁钢 | 2009-06-24 |  2320 | 南昌     |
    | 41928CF444764 | 高镁钢 | 2009-06-23 |  2320 | 南昌     |
    | 3A80FEBCBF3C4 | 生锗钢 | 2009-06-27 |  2020 | 江苏     |
    | 3A80FEBCBF3C4 | 生锗钢 | 2009-06-26 |  2020 | 江苏     |
    | 3A80FEBCBF3C4 | 生锗钢 | 2009-06-25 |  2020 | 江苏     |
    | 3A80FEBCBF3C4 | 生锗钢 | 2009-06-24 |  2020 | 江苏     |
    | 3A80FEBCBF3C4 | 生锗钢 | 2009-06-23 |  2020 | 江苏     |
    +---------------+--------+------------+-------+----------+
    20 rows in set (0.00 sec)mysql>
    mysql> select Location,
        ->  max(if(PDate=date_sub(curdate(), interval 7 day),price,0)) as D_7,
        ->  max(if(PDate=date_sub(curdate(), interval 6 day),price,0)) as D_6,
        ->  max(if(PDate=date_sub(curdate(), interval 5 day),price,0)) as D_5,
        ->  max(if(PDate=date_sub(curdate(), interval 4 day),price,0)) as D_4,
        ->  max(if(PDate=date_sub(curdate(), interval 3 day),price,0)) as D_3,
        ->  max(if(PDate=date_sub(curdate(), interval 2 day),price,0)) as D_2,
        ->  max(if(PDate=date_sub(curdate(), interval 1 day),price,0)) as D_1
        -> from t_free212
        -> where PName='高镁钢'
        -> and PDate>=date_sub(curdate(), interval 7 day)
        -> group by Location;
    +----------+------+------+------+------+------+------+------+
    | Location | D_7  | D_6  | D_5  | D_4  | D_3  | D_2  | D_1  |
    +----------+------+------+------+------+------+------+------+
    | 石家庄   | 2160 | 2160 | 2160 |    0 |    0 |    0 |    0 |
    | 南昌     | 2320 | 2320 | 2320 |    0 |    0 |    0 |    0 |
    | 成都     | 2330 | 2330 | 2330 |    0 |    0 |    0 |    0 |
    +----------+------+------+------+------+------+------+------+
    3 rows in set (0.06 sec)mysql>
      

  3.   

    那你要计算什么价?如果一天一个地方只有一条,则MAX价就等于这个价。你试了再回复,如果结果与你预期不符,把不符的例子贴出来。
      

  4.   

    什么价也不用算,就是想让它能按上面那个图片那样排列,像石家庄有5条记录就列出来5条
    标题也不用改,就是日期显示,我是用于打印在网页上面的,如<tr>/<td>排列下来像上面的数据:+----------+------+------+------+------+------+-
    | Location | 6-23 | 6-24  | 6-25  | 6-26  | 6-27
    +----------+------+------+------+------+------+-
    | 石家庄   | 2160 | 2160 | 2160 | 2160 | 2160 |   
    | 南昌     | 2320 | 2320 | 2320 | 2320 | 2320 |  
    | 成都     | 2330 | 2330 | 2330 | 2330 | 2330 |  
    ......是的,数据是一天一个地方只有一条。
      

  5.   

    标题没有办法仅在SQL语句中实现,只能在你的程序来实现比较方便。现在就是什么价都没算!
      

  6.   

    谢谢ACMAIN_CHM,
    如用于MSSQL的话你三楼的语句要改动那些?不知还有没有更简洁的方法,那一堆MAX看了就头大。
      

  7.   

    MS SQL 你可以到 ms sql server 的版块去问一下。