我正在处理随时间变化但仍保留版本的属性列表,因此我们大致了解我们正在查看的内容(ID为主键):
ID ATTRIBUTENAME ATTRIBUTEVALUE CREATED MODIFIED AttributeID
--- ---------------- ------------------------------- ------------------ ------------------- ---
100 DocName Updated Document 10-JUL-15 08.40.12 10-JUL-15 08.40.12 06
100 Category Regulatory 10-JUL-15 08.40.12 10-JUL-15 08.40.12 05
100 Owner Jane Doe 10-JUL-15 08.40.12 10-JUL-15 08.40.12 04
100 DocName Test Document 10-JUL-15 08.40.12 10-JUL-15 01.10.30 03
100 Category Regulatory 10-JUL-15 08.40.12 10-JUL-15 01.10.30 02
100 Owner John Doe 10-JUL-15 08.40.12 10-JUL-15 01.10.30 01
我想在DocName,Category和Owner上进行一个数据透视,但只选择最新的AttributeValue,其中Modified是最大值。 ID是该属性列表的主要查找。 AttributeID是数据库中该行的唯一GUID(更改为int)。
我如何以这种格式创建数据透视表?
ID DocName Category Owner
--- ---------------- ---------- --------
100 Updated Document Regulatory Jane Doe
我最终需要添加数百个其他属性名称,但这是一个简洁的示例。我也愿意接受更快/更好的想法。
答案 0 :(得分:1)
一种选择是使用rank()
的条件聚合:
select id,
max(case when attributename = 'DocName' then attributevalue end) docname,
max(case when attributename = 'Category' then attributevalue end) Category,
max(case when attributename = 'Owner' then attributevalue end) Owner
from (
select *, rank() over (partition by id order by modified desc) rn
from yourtable ) t
where rn = 1
group by id