1

我正在使用一个允许用户创建自己的字段的系统。这在 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  

?

谢谢。

4

1 回答 1

1

正如 Mark Ba​​nnister 所建议的,您可以使用 PIVOT 功能来做同样的事情

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

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

Oracle 11g 中的 PIVOT 和 UNPIVOT 运算符

 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;
于 2013-09-30T04:51:19.503 回答