這種從行到列的轉換稱爲樞軸。 MySQL沒有透視功能,但可以使用帶有CASE
表達式的聚合函數來複制。
您可以使用以下方法:
select
max(case when element_label = 'Name' then element_value end) Name,
max(case when element_label = 'Address' then element_value end) Address,
max(case when element_label = 'State' then element_value end) State,
max(case when element_label = 'City' then element_value end) City,
max(case when element_label = 'Zip' then element_value end) Zip
from yt
見SQL Fiddle with Demo。
如果你有一個未知的數字,你要轉換爲列的值,那麼你可以使用準備好的語句生成動態SQL:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(CASE WHEN element_label = ''',
element_label,
''' THEN element_value else null END) AS `',
element_label, '`'
)
) INTO @sql
FROM yt;
SET @sql
= CONCAT('SELECT ', @sql, '
from yt
');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
見SQL Fiddle with Demo。兩個查詢都給出結果:
| NAME | ADDRESS | CITY | STATE | ZIP |
----------------------------------------------------------
| John Smith | 100 Elm Street | Columbus | Ohio | 13579 |
通常,您將有一個列,您也將分組。例如,如果您有record_id列,那麼您將添加一個GROUP BY record_id
,因此您將返回多行結果。
如何將名稱鏈接到地址? – 2013-04-07 20:00:06