请教下大家。比如一个表的字段属性如图:
每个产品有三个属性。那么一般在循环读取商品信息的时候 也是 商品1的属性展示完以后循环商品2依次往后。但是现在 我要做个商品的对比功能: 比如我选择商品1和商品3进行属性对比。展示效果如图:
这个sql行列转换要怎么写呢?

解决方案 »

  1.   

    反正要前台显示,建议还是用前台程序来处理,灵活又省服务器资源:
    select '价格' as '属性', sum(if(产品名称='nokia', 价格, 0)) as nokia, sum(if(产品名称='sanxing', 价格, 0)) as sanxing
    union
    select '体积' as '属性', sum(if(产品名称='nokia', 体积, 0)) as nokia, sum(if(产品名称='sanxing', 体积, 0)) as sanxing
    union
    select '厚度' as '属性', sum(if(产品名称='nokia', 厚度, 0)) as nokia, sum(if(产品名称='sanxing', 厚度, 0)) as sanxing
      

  2.   

    这个sql语句可以直接执行吗?
      

  3.   

    可以但显然效率一般,建议还是在程序中直接处理,而不是用SQL。
      

  4.   

     可是为什么我现在直接执行sql语句有问题呢?提示字段名不存在
    那如果不用sql语句处理。是程序中进行得到的数组数据 进行键和值的交换?
      

  5.   

    你要把你的数据库表的信息贴出来啊,你只弄一个 excel 截图谁知道是什么表什么字段呢?
    这个只是“伪代码”而已,你自己把字段名和表名替换上去:select '价格这个字段的字段名' as '属性', sum(if(产品名称这个字段的字段名='nokia', 价格这个字段的字段名, 0)) as nokia, sum(if(产品名称这个字段的字段名='sanxing', 价格这个字段的字段名, 0)) as sanxing 
    from 你的表
    union
    select '体积这个字段的字段名' as '属性', sum(if(产品名称这个字段的字段名='nokia', 体积这个字段的字段名, 0)) as nokia, sum(if(产品名称这个字段的字段名='sanxing', 体积这个字段的字段名, 0)) as sanxing 
    from 你的表
    union
    select '厚度这个字段的字段名' as '属性', sum(if(产品名称这个字段的字段名='nokia', 厚度这个字段的字段名, 0)) as nokia, sum(if(产品名称这个字段的字段名='sanxing', 厚度这个字段的字段名, 0)) as sanxing
    from 你的表
      

  6.   

    你的表名、字段名是什么
    贴建表及插入记录的SQL,及要求结果出来看看