特定的枢轴查询

时间:2013-11-22 17:26:59

标签: sql sql-server-2012 pivot

我一直在寻找旋转柱,并感谢任何帮助。我看到很多关于在枢轴上总结一行的例子,但我有一个不同的场景。我有一个JSON字段,它被解析,输出被放置在视图中。

ID Name     StringValue
1  type     user
1  name     aeolos smith
1  access   admin
2  type     user
2  name     ramuh smith
2  access   author

我想以某种方式将其转移到最终结果如下。

type      name              access
user      aeolos smith      admin
user      ramuh smith       author
对于标识符为ID的任何条目,

等等。

这可能吗?

1 个答案:

答案 0 :(得分:1)

您没有指定正在使用的数据库,但是您的数据库支持窗口函数,如row_number(),那么您可以使用带有CASE表达式的聚合函数以及行号来获得最终结果:

select 
  max(case when name = 'type' then stringvalue end) type,
  max(case when name = 'name' then stringvalue end) name,
  max(case when name = 'access' then stringvalue end) access
from
(
  select id, name, stringvalue,
    row_number() over(partition by name order by id) seq
  from yourtable
) d
group by seq;

请参阅SQL Fiddle with Demo

如果您的数据库支持PIVOT功能,那么您仍然会使用row_number()窗口函数和pivot来获得最终结果:

select type, name, access
from
(
  select name nm, stringvalue,
    row_number() over(partition by name order by id) seq
  from yourtable
) d
pivot
(
  max(stringvalue)
  for nm in (type, name, access)
) piv;

请参阅SQL Fiddle with Demo