表table1数据如下。 如何让KEY不同的value分别交叉组合
当前select * from table1数据如下KEY value
1 蓝色
1 红色
2 大号
2 小号
61 精品
61 普通品
交叉组合后可显示字段1 字段2
1 蓝色/大号/精品
2 蓝色/大号/普通品
3 蓝色/小号/精品
4 蓝色/小号/普通品
5 红色/大号/精品
6 红色/大号/普通品
7 红色/小号/精品
8 红色/小号/普通品
我就想问一下动态语句怎么写。静态语句我已经写出来了。 就是数据是动态的要怎么实现。谢谢。急。
当前select * from table1数据如下KEY value
1 蓝色
1 红色
2 大号
2 小号
61 精品
61 普通品
交叉组合后可显示字段1 字段2
1 蓝色/大号/精品
2 蓝色/大号/普通品
3 蓝色/小号/精品
4 蓝色/小号/普通品
5 红色/大号/精品
6 红色/大号/普通品
7 红色/小号/精品
8 红色/小号/普通品
我就想问一下动态语句怎么写。静态语句我已经写出来了。 就是数据是动态的要怎么实现。谢谢。急。
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组就不会有问题。
比如,你的表名是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 )
看看下边的代码。
首先,建表脚本。
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 ;
有啥问题请回复,咱们再研究。