如何使用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
在这个查询中,我知道我的钥匙 如果我不了解我的田地而且我不知道我有多少田地怎么办?
我希望动态转换所有内容而不指定我的字段。
答案 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;