表table1数据如下。 如何让KEY不同的value分别交叉组合
当前select * from table1数据如下KEY   value
1    蓝色
1    红色
2    大号
2    小号
61    精品
61    普通品
交叉组合后可显示字段1      字段2
  1       蓝色/大号/精品
   2      蓝色/大号/普通品
   3      蓝色/小号/精品
   4       蓝色/小号/普通品
   5      红色/大号/精品
   6      红色/大号/普通品
   7      红色/小号/精品
   8     红色/小号/普通品
我就想问一下动态语句怎么写。静态语句我已经写出来了。 就是数据是动态的要怎么实现。谢谢。急。

解决方案 »

  1.   

    周末没人上CSDN吗?
      

  2.   

    SELECT @R:=@R+1 `KEY`,t.value FROM (
    SELECT @R:=0,CONCAT_WS('/',t1.value,t2.value,t3.value) VALUE FROM (
     SELECT '1' `KEY`,'蓝色' VALUE FROM DUAL UNION ALL 
     SELECT '1' `KEY`,'红色' VALUE FROM DUAL UNION ALL 
     SELECT '2' `KEY`,'大号' VALUE FROM DUAL UNION ALL 
     SELECT '2' `KEY`,'小号' VALUE FROM DUAL UNION ALL 
     SELECT '61' `KEY`,'精品' VALUE FROM DUAL UNION ALL 
     SELECT '61' `KEY`,'普通品' VALUE FROM DUAL ) t1 
     JOIN (
     SELECT '1' `KEY`,'蓝色' VALUE FROM DUAL UNION ALL 
     SELECT '1' `KEY`,'红色' VALUE FROM DUAL UNION ALL 
     SELECT '2' `KEY`,'大号' VALUE FROM DUAL UNION ALL 
     SELECT '2' `KEY`,'小号' VALUE FROM DUAL UNION ALL 
     SELECT '61' `KEY`,'精品' VALUE FROM DUAL UNION ALL 
     SELECT '61' `KEY`,'普通品' VALUE FROM DUAL ) t2 ON 1=1
     JOIN (
     SELECT '1' `KEY`,'蓝色' VALUE FROM DUAL UNION ALL 
     SELECT '1' `KEY`,'红色' VALUE FROM DUAL UNION ALL 
     SELECT '2' `KEY`,'大号' VALUE FROM DUAL UNION ALL 
     SELECT '2' `KEY`,'小号' VALUE FROM DUAL UNION ALL 
     SELECT '61' `KEY`,'精品' VALUE FROM DUAL UNION ALL 
     SELECT '61' `KEY`,'普通品' VALUE FROM DUAL ) t3 ON 1=1
     WHERE t1.`KEY` = '1' AND t2.`KEY` = '2' AND t3.`KEY` = '61') t ;
      

  3.   

    我没有你的表,所以自己写了一个临时表,你可以增加几亿个型号,再加几百亿个颜色都没有问题。
    只要你的分组是3组就不会有问题。
    比如,你的表名是table1,把我的那个临时表,缓冲你的表名table1就可以了。
    我的临时表:
    (
     SELECT '1' `KEY`,'蓝色' VALUE FROM DUAL UNION ALL 
     SELECT '1' `KEY`,'红色' VALUE FROM DUAL UNION ALL 
     SELECT '2' `KEY`,'大号' VALUE FROM DUAL UNION ALL 
     SELECT '2' `KEY`,'小号' VALUE FROM DUAL UNION ALL 
     SELECT '61' `KEY`,'精品' VALUE FROM DUAL UNION ALL 
     SELECT '61' `KEY`,'普通品' VALUE FROM DUAL )
      

  4.   

    已经搞定了。用游标+SQL语句拼接。笛卡尔积 的逻辑。谢谢
      

  5.   

    为啥一定要用存储过程,为啥一定要循环,简单复杂化。
    看看下边的代码。
    首先,建表脚本。
    CREATE TABLE `table1` (
      `KEY` VARCHAR(2) NOT NULL DEFAULT '',
      `VALUE` VARCHAR(3) NOT NULL DEFAULT ''
    ) ;
    然后,插入测试数据,您可以在这个基础上,随意添加、修改、删除数据。
    insert  into `table1`(`KEY`,`VALUE`) values 
    ('1','蓝色'),
    ('1','红色'),
    ('2','大号'),
    ('2','小号'),
    ('61','精品'),
    ('61','普通品');
    最后,执行以下代码,不是一条一条的单独执行,而是全部选择后,一起执行。
    SET @R1 := 0 ;
    SET @R2 := 0 ;
    SET @S := '' ;
    SELECT CONCAT("SELECT @R2:=@R2+1 S1,CONCAT_WS('/',",S1,') S2 FROM ' ,S2,' WHERE ',S3,';') INTO @S FROM (SELECT GROUP_CONCAT('T',R,'.','VALUE') S1,GROUP_CONCAT('TABLE1',' T',R) S2,REPLACE(GROUP_CONCAT('T',R,'.KEY=',T.KEY),',',' AND ') S3 FROM (SELECT @R1:=@R1+1 R,T.KEY FROM TABLE1 T GROUP BY T.KEY) T) T ;
    PREPARE stmt1 FROM @S ; 
    EXECUTE stmt1  ; 
    有啥问题请回复,咱们再研究。