动态地将行转换为列而不指定字段

时间:2013-09-21 10:12:52

标签: mysql

如何使用Case动态转换键值表而不指定行名?
例如,我有一个名为key_value的表:

id     key     value
1     name     john
2     fname    akbar
3     jobs     Software enginer
.    .    .
.    .    .
.    .    .
.    .    .
.    .    .
n    n    n

我想将所有这些行动态转换为列,而不指定键名,如:

name   fname   jobs............................n
john    akbar   sofware engineer...........n

我用过:

Max(Case WHEN key='name' THEN value END) AS name

在这个查询中,我知道我的钥匙 如果我不了解我的田地而且我不知道我有多少田地怎么办?

我希望动态转换所有内容而不指定我的字段。

1 个答案:

答案 0 :(得分:5)

这也是我回答的问题 SQL Query fields as columns
我修改它来回答你的问题,我希望它对我有帮助!

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(a.xvalue = ''',
      xvalue,
      ''', a.xvalue, NULL)) AS ',
      xkey
    )
  ) INTO @sql
FROM key_value;


SET @sql = CONCAT('SELECT ', @sql, ' 
                   FROM key_value a
                   LEFT JOIN key_value AS b
                    ON a.id=b.id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SQL Fiddle

相关问题