2015-02-10 84 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。但它是有限數量的列。

相關問題