我正在寻找一种方法来选择这个结果:
id_item name1 name2 name3
1 value10 value20 value30
2 - value40 -
3 value50 value60 -
从此数据库表(此处的自定义字段到每个id_item):
id_item Name Value
1 name1 value10
1 name2 value20
1 name3 value30
2 name2 value40
3 name1 value50
3 name2 value60
无法解决。有办法吗?
答案 0 :(得分:2)
您可以使用此查询获取新结果:
SELECT
id_item,
MAX(CASE WHEN Name = 'name1' THEN value ELSE '-' END) name1,
MAX(CASE WHEN Name = 'name2' THEN value ELSE '-' END) name2,
MAX(CASE WHEN Name = 'name3' THEN value ELSE '-' END) name3
FROM
your_table
GROUP BY
id_item;
我调整了此great answer bluefeet动态生成此查询:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
'MAX(CASE WHEN e.Name = ''',
e.Name,
''' THEN value ELSE ''-'' END) AS ',
e.Name
) INTO @sql
FROM example e;
SET @sql = CONCAT('SELECT e.id_item
, ', @sql, '
from example e
GROUP BY e.id_item;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
答案 1 :(得分:0)
我认为你需要开发商店程序。
步骤1:找到“名称”列的不同值并存储在任何会话变量
中第2步:使用while循环并生成动态查询
示例:
select * from (select A.id_item,if(A.Name='name1',A.Value,Null) as 'name1',if(A.Name='name2',A.Value,Null) as 'name2',if(A.Name='name3',A.Value,Null) as 'name3' from testtable A) group by id_item
我希望你得到我的解释
如果你有任何查询然后在这里发表评论,那么我可以根据需要在sql小提琴中构建示例。