[英]mysql How to get group_concat () result into list
I have a table named abc
, and the values are : 我有一个名为
abc
的表,其值为:
date | Code | Class | subitem | Item_No |
2017-04-02 | FII | INDIR | YAA | 28 |
2017-04-09 | FII | INDIR | YAA | 28 |
2017-04-16 | FII | INDIR | YAA | 14 |
2017-04-23 | FII | INDIR | YAA | 24 |
2017-04-30 | FII | INDIR | YAA | 41 |
2017-04-02 | RRT | INDIR | BKK | 8 |
2017-04-09 | RRT | INDIR | BKK | 3 |
2017-04-16 | RRT | INDIR | BKK | 16 |
2017-04-23 | RRT | INDIR | BKK | 15 |
2017-04-30 | RRT | INDIR | BKK | 32 |
2017-04-09 | RRT | INDIR | WESEL | 14 |
2017-04-16 | RRT | INDIR | WESEL | 7 |
2017-04-23 | RRT | INDIR | WESEL | 2 |
2017-04-02 | RRT | INDIR | YAA | 67 |
2017-04-09 | RRT | INDIR | YAA | 98 |
2017-04-16 | RRT | INDIR | YAA | 135 |
2017-04-23 | RRT | INDIR | YAA | 103 |
2017-04-30 | RRT | INDIR | YAA | 119 |
2017-04-02 | IDS | INDIR | YAA | 8 |
And the output I want like this: 和我想要这样的输出:
CODE | ITEM_NO | GROUP | DATE
FII | 103 | A1 | 2017-04-02
RRT | 103 | A1 | 2017-04-02
IDS | 103 | A1 | 2017-04-02
FII | 126 | A2 | 2017-04-09
RRT | 126 | A2 | 2017-04-09
FII | 149 | A3 | 2017-04-16
RRT | 149 | A3 | 2017-04-16
FII | 127 | A4 | 2017-04-23
RRT | 127 | A4 | 2017-04-23
FII | 160 | A5 | 2017-04-30
RRT | 160 | A5 | 2017-04-30
Here my script: 这是我的脚本:
select distinct
Group_concat(Code SEPARATOR ', ') Code,
sum(Item_No) totally,
CONCAT("A",CAST(@jim:=@jim +1 AS CHAR)) Group,
Date Date
from tableT
where Date between '2017-04-01' and '2017-04-30'
and SubItem = 'YAA'
and dept IN ('FII','RRT','IDS')
group by Date
But I only can get the result like this : 但是我只能得到这样的结果:
CODE | ITEM_NO | GROUP | DATE
FII, RRT, IDS | 103 | A1 | 2017-04-02
FII, RRT | 126 | A2 | 2017-04-09
FII, RRT | 149 | A3 | 2017-04-16
FII, RRT | 127 | A4 | 2017-04-23
FII, RRT | 160 | A5 | 2017-04-30
Is there any other way to get the RESULT ? 还有其他方法可以获取结果吗? Thank you for your help
谢谢您的帮助
for this you could use a join between a select for Group and a select for code 为此,您可以在select for Group和select for code之间使用联接
select
t1.deptPivot Code,
sum(t1.Item_No) totally,
t2.Group,
t1.DATE
from tableT t1
INNER JOIN (
select
CONCAT("A",CAST(@jim:=@jim +1 AS CHAR)) Group,
Date Date
from tableT
where Date between '2017-04-01' and '2017-04-30'
and SubItem = 'YAA'
and dept IN ('FII','RRT','IDS')
group by Date,
) t2 on t1.Date = t2.Date
where Date between '2017-04-01' and '2017-04-30'
and SubItem = 'YAA'
and dept IN ('FII','RRT','IDS')
group by code, group, Date
The answer is in SO where the link is Mysql string split 答案在SO,其中链接是Mysql字符串拆分
DELIMITER $$
CREATE FUNCTION strSplit(x VARCHAR(65000), delim VARCHAR(12), pos INTEGER)
RETURNS VARCHAR(65000)
BEGIN
DECLARE output VARCHAR(65000);
SET output = REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos)
, LENGTH(SUBSTRING_INDEX(x, delim, pos - 1)) + 1)
, delim
, '');
IF output = '' THEN SET output = null; END IF;
RETURN output;
END $$
CREATE PROCEDURE BadTableToGoodTable()
BEGIN
DECLARE i INTEGER;
SET i = 1;
REPEAT
INSERT INTO GoodTable (col1, col2)
SELECT col1, strSplit(col2, ',', i) FROM BadTable
WHERE strSplit(col2, ',', i) IS NOT NULL;
SET i = i + 1;
UNTIL ROW_COUNT() = 0
END REPEAT;
END $$
DELIMITER ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.