考虑下表:
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的颜色应该是黄色而不是红色,因为它的日期是前一个
答案 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;