查询提取密钥 - >值表到柱状表

时间:2017-03-24 16:45:03

标签: mysql sql

考虑下表:

 itemid            itemkey        itemvalue    
 ----------------  -------------  ------------ 
 123               Colour         Red            
 123               Size           Medium             
 123               Fabric         Cotton

是否有一个简单的查询来获取这样的内容:

   itemid          Colour       Size        Fabric
   ----            ----         ---         ---
   123             Red          Medium      Cotton     
   124             Yellow       Large       Poly
   ...

修改

当除了所有标签之外的第一个表包含日期时,还有一个变体,并且在您的数据透视表中,您需要选择最新的标签,例如:

 itemid            itemkey        itemvalue     date
 ----------------  -------------  ------------  ------
 123               Colour         Red            2017-03
 123               Colour         Yellow         2017-04
 123               Size           Medium             
 123               Fabric         Cotton

所以现在记录123的颜色应该是黄色而不是红色,因为它的日期是前一个

1 个答案:

答案 0 :(得分:1)

它叫做旋转,如果你有动态的项目数,应该在应用程序代码中完成。

如果事先知道这些项目,您可以使用条件聚合:

select itemid,
    max(case when itemkey = 'Colour' then itemvalue end) as Colour,
    max(case when itemkey = 'Size' then itemvalue end) as Size,
    max(case when itemkey = 'Fabric' then itemvalue end) as Fabric,
    . . . 
from your_table
group by itemid;

如果您有基于日期的版本控制,您可以使用子查询查找最新记录,然后进行透视:

select  itemid,
    max(case when itemkey = 'Colour' then itemvalue end) as Colour,
    max(case when itemkey = 'Size' then itemvalue end) as Size,
    max(case when itemkey = 'Fabric' then itemvalue end) as Fabric,
    . . . 
from your_table t
join (
    select itemid, itemkey
        max(date) as date
    from your_table
    group by itemid, itemkey
    ) t2 using (itemid, itemkey, date)
group by itemid;