2015-10-07 67 views
0

我有一個表,如下所示。在mysql中選擇行到列

**id | location** 
1 | East Flow 
2 | East Level 
3 | East Pressure 

我想用Mysql中的select語句按如下方式轉換上面的表。

1   | 2   | 3 
East Flow | East Level | East Pressure 

我正在使用MySql 5.5 請幫忙。

回答

2

如果Id列的計數是固定的或已知的,則使用CASE表達式。

查詢

select max(case when id = 1 then location end) as `1`, 
max(case when id = 2 then location end) as `2`, 
max(case when id = 3 then location end) as `3` 
from your_table; 

如果id列的數量是未知的,那麼你可能需要使用動態SQL。

查詢

select 
group_concat(distinct 
    concat(
     'max(case when id = ', 
     id,' then location end) as `', id,'`' 
    ) 
) into @sql 
from your_table; 

set @sql = concat('select ', @sql, ' from your_table'); 

prepare stmt from @sql; 
execute stmt; 
deallocate prepare stmt; 

SQL Fiddle

+0

您好感謝您的答覆。在我的情況下,ID列的數量是未知的,不是固定的。任何想法? – prabu

+0

嗨,此解決方案正在工作。謝謝你。但是面對另外一個問題,當我在MySql工作臺中運行動態SQL時,它可以很好地工作,但是當我使用eclipse Datasource explorer運行時,我遇到了語法錯誤。任何想法? – prabu