2015-02-10 56 views
0

我的示例表:SELECT * FROM sample是否可以按行而不是按列显示数据?

+-----+-------+---------+ 
| id | fname | lname | 
+-----+-------+---------+ 
|  |  |   | 
| 1 | Me | subject | 
| 2 | I | subject | 
| 3 | Myself| subject | 
+-----+-------+---------+ 

是否有可能在使用了lname或任何公式不同,此输出?

+-----+-------+---------+---------+---------+ 
| id | lname | fname | fname | fname | 
+-----+-------+---------+---------+---------+ 
|  |  |   |   |   | 
| 1 |subject| me | I | Myself | 
+-----+-------+---------+---------+---------+ 

谢谢。

+0

你正在试图通过这样做达到什么目的? – 2015-02-10 05:50:02

回答

1

不正是你想要的,但也许不够

select min(id) as id, 
     lname, 
     group_concat(fname separator ' ' order by id) as fname 
from your_table 
group by lname 
+1

group_concat()将按照每个问题创建单列而不是多列 – 2015-02-10 05:53:36

+0

是的,这就是为什么我说*我的答案中不完全是OP想要的*。 – 2015-02-10 05:54:41

+0

nahh!顺便说一句,我忘了group_concat,谢谢。 – PACMAN 2015-02-10 05:58:15

0

列和表达式返回那些列的数量已经在语句中指定。在你给出的例子中,是的,可以编写一个返回指定结果集的语句。

例如:

SELECT t.id 
    , t.lname 
    , (SELECT f1.fname 
      FROM mytable f1 
      WHERE f1.lname = t.lname 
      ORDER BY f1.id 
      LIMIT 0,1 
     ) AS fname 
    , (SELECT f2.fname 
      FROM mytable f2 
      WHERE f2.lname = t.lname 
      ORDER BY f2.id 
      LIMIT 1,1 
     ) AS fname 
    , (SELECT f3.fname 
      FROM mytable f3 
      WHERE f3.lname = t.lname 
      ORDER BY f3.id 
      LIMIT 2,1 
     ) AS fname 
    FROM (SELECT MIN(m.id) AS id 
       , m.lname 
      FROM mytable m 
      GROUP BY m.lname 
     ) t 

在更一般的情况下,这是不可能改变由单一SELECT语句返回的列数。上面的示例可以扩展为返回四个或五个或更多的值fname。但它是有限数量的列。

相关问题