mysql格式结果为列而不是行

时间:2009-10-27 13:48:32

标签: sql mysql

使用MySQL服务器,我有一个表结构,如:

(Table test)

id     Name

1     "test1"
2     "test2"
3     "test3"

当我执行以下查询时:

Select name from test

结果是:

"test1"
"test2"
"test3"

如何调整此查询以使结果为列,如下所示:

"test1" "test2" "test3"

2 个答案:

答案 0 :(得分:2)

一般来说,最好在应用程序层中格式化输出。想象一下,您的表在“名称”列中有728003个唯一值。你的结果将非常广泛。

但是,如果你真的想要这样做并且你有一些统一列要分组,你可以这样做:

SELECT unifying_column, GROUP_CONCAT(DISTINCT name) FROM test
GROUP BY unifying_column;

ps,group_concat只能容纳有限数量的字符


附录

我能用多列做这件事的唯一方法就是这样(并且 是一个可怕的kludge):

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个,我也不确定如何使用额外的列。

答案 1 :(得分:0)

为什么你需要像数据库那样返回数据?

如果您确实需要该格式的数据,那么循环结果并将它们附加到字符串以获取所需格式的数据会更有意义,但这应该使用编程语言而不是直接使用来自数据库。