我正在使用一个允许用户创建自己的字段的系统。这在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
?
感谢。
答案 0 :(得分:1)
根据Mark Bannister的建议,您可以使用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;