sql - mysql 将结果格式化为列而不是行

标签 sql mysql

使用 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/

相关文章:

c# - 从类中运行 MySQL 查询。值(value)观没有正确传递到类(class)

Mysql基于count和interval的返回键

mysql - 使用 MySQL 查询在整个表中查找和替换文本

mysql.connector.errors.InterfaceError : Failed parsing EOF packet

sql - 我将如何为读写操作实现单独的数据库?

sql - 在 SQL、JOIN 和 COUNT 中使用 HAVING

mysql 比较两个表

mysql 哪里或有

sql - 动态情况下

mysql - SQL中基于值的条件在哪里?