我有一个看起来像这样的表:
Column1 Column2
1 A
1 B
1 C
2 D
2 A
2 B
2 E
2 F
3 A
3 D
3 C
3 H
3 J
MySQL中是否有查询显示如下信息:
Column1 Header1 Header2 Header3 Header4 Header5
1 A B C
2 D A B E F
3 A D C H J
答案 0 :(得分:5)
这是可能的......你必须通过用MAX()伪装然后在里面条件来模拟一个数据透视表。你只需要知道你想要多少列......
我刚刚打电话给表格信,因为这就是我的立场。
SELECT
id,
MAX(CASE counter WHEN 1 THEN letter ELSE ' ' END),
MAX(CASE counter WHEN 2 THEN letter ELSE ' ' END) ,
MAX(CASE counter WHEN 3 THEN letter ELSE ' ' END) ,
MAX(CASE counter WHEN 4 THEN letter ELSE ' ' END) ,
MAX(CASE counter WHEN 5 THEN letter ELSE ' ' END)
FROM
( SELECT
id, letter,
IF(@A = id, @B := @B + 1, @B := 1) AS counter,
@A := id
FROM letters
CROSS JOIN(SELECT @A := 0, @B := 0) t
) temp
GROUP BY id;
所以对于这个查询,我为id设置了一个计数器..计算id的出现次数...所以你只需要MAX(CASE counter WHEN 1-5 THEN col2 ELSE ' ' END
表示当计数器为1 - 5时(可能更多)如果你有更多的ID)放在与它对应的字母中,或者放在一个空白处..希望这有用!
+----+------+-------+-------+-------+-------+
| ID | COL1 | COL2 | COL3 | COL4 | COL5 |
+----+------+-------+-------+-------+-------+
| 1 | A | B | C | |
| 2 | D | A | B | E | F |
| 3 | A | D | C | H | J |
+----+------+-------+-------+-------+-------+
答案 1 :(得分:4)
简单的答案是肯定的..
您正在寻找的基本查询是:
SELECT column1, GROUP_CONCAT(column2 SEPARATOR ' ')
FROM table_name
GROUP BY column1
您甚至可以订购结果:
SELECT column1, GROUP_CONCAT(column2 ORDER BY column2 SEPARATOR ' ')
FROM table_name
GROUP BY column1
ORDER BY column1
答案 2 :(得分:3)
或者,与JR的解决方案非常相似(并且稍慢)......
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(Column1 INT NOT NULL
,Column2 CHAR(1) NOT NULL
,PRIMARY KEY(Column1,Column2)
);
INSERT INTO my_table VALUES
(1 ,'A'),
(1 ,'B'),
(1 ,'C'),
(2 ,'D'),
(2 ,'A'),
(2 ,'B'),
(2 ,'E'),
(2 ,'F'),
(3 ,'A'),
(3 ,'D'),
(3 ,'C'),
(3 ,'H'),
(3 ,'J');
SELECT column1
, MAX(CASE WHEN rank = 1 THEN column2 END) n1
, MAX(CASE WHEN rank = 2 THEN column2 END) n2
, MAX(CASE WHEN rank = 3 THEN column2 END) n3
, MAX(CASE WHEN rank = 4 THEN column2 END) n4
, MAX(CASE WHEN rank = 5 THEN column2 END) n5
FROM
( SELECT x.*
, COUNT(*) rank
FROM my_table x
JOIN my_table y
ON y.column1 = x.column1
AND y.column2 <= x.column2
GROUP
BY x.column1
, x.column2
) n
GROUP
BY column1;
+---------+------+------+------+------+------+
| column1 | n1 | n2 | n3 | n4 | n5 |
+---------+------+------+------+------+------+
| 1 | A | B | C | NULL | NULL |
| 2 | A | B | D | E | F |
| 3 | A | C | D | H | J |
+---------+------+------+------+------+------+