查询将字段名称/值行转换为单行

时间:2013-09-28 14:01:22

标签: sql oracle oracle11g

我正在使用一个允许用户创建自己的字段的系统。这在Oracle中实现为字段表,然后是字段/值表。如果我运行这样的查询:

SELECT 
  field_name, field_value
FROM field_t
INNER JOIN field_t ON field_t.id = field_string_t.field_id
WHERE (field_name = 'foo'
  OR field_name = 'bar'
  OR field_name = 'buzz'
)

然后我可以在一系列行中获得字段名称/值对:

id      field_name    field_value
8       foo           1
8       bar           5
8       buzz          4
... and so on for each id

如何编写查询以返回此内容:

id      foo      bar      buzz
8       1        5        4  

感谢。

1 个答案:

答案 0 :(得分:1)

根据Mark Ba​​nnister的建议,您可以使用PIVOT功能执行相同的操作

如果要使用子查询而不是field_name的值,请使用PIVOT XML(注意,在这种情况下结果将采用XML格式)

如需了解更多信息,请查看以下链接

PIVOT and UNPIVOT operators in Oracle 11g

 select * from
 (
 SELECT id, field_name, field_value,field_id
 FROM   field_t)
 PIVOT  (
 MAX(field_value) 
 FOR (field_name) IN ('foo' as foo, 'bar' AS bar, 'buzz' as buzz))
 WHERE id=field_id;