使用 MySQL 服务器,我的表结构如下:
(Table test)
id Name
1 "test1"
2 "test2"
3 "test3"
当我执行以下查询时:
Select name from test
结果是:
"test1"
"test2"
"test3"
如何调整此查询以使结果为列,如下所示:
"test1" "test2" "test3"
最佳答案
一般来说,最好在应用程序层格式化输出。假设您的表的“名称”列中有 728003 个唯一值。你的结果将变得非常宽。
但是,如果您确实想这样做并且有一些统一的列可以分组,您可以这样做:
SELECT unifying_column, GROUP_CONCAT(DISTINCT name) FROM test
GROUP BY unifying_column;
ps,group_concat
只能容纳有限数量的字符
附录
我可以用多个列来完成此操作的唯一方法是这样的(并且它是一个可怕的拼凑):
SELECT SUBSTRING_INDEX(nlist,',',1) AS col1,
SUBSTRING_INDEX(SUBSTRING_INDEX(nlist,',',2),',',-1) AS col2,
SUBSTRING_INDEX(SUBSTRING_INDEX(nlist,',',3),',',-1) AS col3,
SUBSTRING_INDEX(SUBSTRING_INDEX(nlist,',',4),',',-1) AS col4,
SUBSTRING_INDEX(SUBSTRING_INDEX(nlist,',',5),',',-1) AS col5,
SUBSTRING_INDEX(SUBSTRING_INDEX(nlist,',',6),',',-1) AS col6,
SUBSTRING_INDEX(SUBSTRING_INDEX(nlist,',',7),',',-1) AS col7,
SUBSTRING_INDEX(SUBSTRING_INDEX(nlist,',',8),',',-1) AS col8,
SUBSTRING_INDEX(SUBSTRING_INDEX(nlist,',',9),',',-1) AS col9,
SUBSTRING_INDEX(nlist,',',-1) AS col10
FROM
(SELECT unifying_column, GROUP_CONCAT(DISTINCT name LIMIT 10) AS nlist FROM test
GROUP BY unifying_column) AS subtable;
以上内容未经测试,可能存在语法错误。我也不确定如果名称少于 10 个,它会如何处理额外的列。
关于sql - mysql 将结果格式化为列而不是行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1630924/