我正在使用TABLE,需要逻辑上的帮助。
检查下面的URL以获取表结构和示例数据。
http://sqlfiddle.com/#!2/ece06/2
表格架构:
CREATE TABLE test ( ID INTEGER, NAME VARCHAR (50), VALUE INTEGER );
插入的数据:
INSERT INTO test VALUES (1, 'A', 4); INSERT INTO test VALUES (1, 'B', 5); INSERT INTO test VALUES (1, 'C', 8); INSERT INTO test VALUES (2, 'D', 9); INSERT INTO test VALUES (2, 'E', 9); INSERT INTO test VALUES (3, 'F', 9); INSERT INTO test VALUES (3, 'G', 9); INSERT INTO test VALUES (3, 'H', 9); INSERT INTO test VALUES (3, 'I', 9);
询问:
SELECT ID, GROUP_CONCAT(NAME) AS CODE FROM test GROUP BY ID;
输出:
ID CODE 1 A,B,C 2 D,E 3 F,G,H,I
预期输出:
ID CODE CODE CODE CODE 1 A B C NULL 2 D E NULL NULL 3 F G H I
如您所见,查询的输出包含逗号。目前,我们正在使用PHP进行字符串concat,在显示时会拆分!
还有其他方法可以拆分RESULT并在列和相同的ROW中显示每个值吗?同样的结果吗?
注意:每个行的代码可能有所不同。
在同事的帮助下,我们终于解决了这个问题。希望有人可能需要它。如果有人使它变得简单得多,这是受欢迎的。
BEGIN SET @v=0; SET @v1=0; SELECT tmp.cnt INTO @v FROM (SELECT Id, count(ID) AS cnt, GROUP_CONCAT(name) FROM test GROUP BY id) tmp ORDER BY tmp.cnt DESC LIMIT 1; SET @str=' '; WHILE(@v>@v1) DO SET @v1=@v1+1; IF(@str='') THEN SET @str=CONCAT(@str,'ID, REPLACE(SUBSTRING(SUBSTRING_INDEX(GROUP_CONCAT(NAME), '','',', @v1,'),LENGTH(SUBSTRING_INDEX(GROUP_CONCAT(NAME),'','',', @v1,'-1)) + 1),'','','''') AS Code' ,@v1); ELSE SET @str= CONCAT(@str,',REPLACE(SUBSTRING(SUBSTRING_INDEX(GROUP_CONCAT(NAME),'','',', @v1,'),LENGTH(SUBSTRING_INDEX(GROUP_CONCAT(NAME),'','',' , @v1,' -1)) + 1),'','','''') AS Code',@v1); END IF; END WHILE; SET @str=CONCAT('SELECT ' , @str, ' FROM test GROUP BY ID'); PREPARE MYSQLQUERY FROM @str; EXECUTE MYSQLQUERY; DEALLOCATE PREPARE MYSQLQUERY; END