MySQL GROUP_CONCAT与COLUMN SPLIT [英] MySQL GROUP_CONCAT with COLUMN SPLIT

查看:325
本文介绍了MySQL GROUP_CONCAT与COLUMN SPLIT的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用TABLE,需要逻辑帮助.

I am working with a TABLE, need logical help.

检查下面的URL以获取表结构和示例数据.

Check the below URL for the table structure and sample data.

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,在显示时会拆分!

As you can see the output of the query has concat with comma. And currently we are doing string concat using PHP which splits while displaying!!

是否还有其他方法可以拆分RESULT并在列和相同的ROW中显示每个值?同样的结果吗?

Is there any other way to split the RESULT and show each value in column and same ROW? In same result?

注意:每个ROW的代码可能有所不同.

Note: The CODE might vary for each ROW.

推荐答案

在我同事的帮助下,我们到了解决此问题的关键时刻.希望有人可能需要它.如果有人使它变得更简单,这是受欢迎的.

With Help from my colleague We arrived at a point to solve this senario. Hope some one might needed it.. It is welcome if some one make it much simpler.

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

这篇关于MySQL GROUP_CONCAT与COLUMN SPLIT的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆