2015-02-10 4 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

Что вы пытаетесь достичь, выполнив это? –

ответ

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() создаст один столбец, а не несколько столбцов, в соответствии с вопросом –

+0

Да, поэтому я сказал * Не совсем то, что хочет OP * в моем ответе. –

+0

nahh! Я забыл о group_concat, кстати, спасибо. – PACMAN

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. Но это конечное число столбцов.

Смежные вопросы