首页 > 解决方案 > 旋转多个属性并将它们分组为“单个”属性(多对一)

问题描述

所以我有一个名为 Value 的表,它与不同的“字段”相关联。请注意,其中一些字段具有相似的“名称”,但名称不同。最终,我希望这些“相似名称”在结果集中被旋转/分组为相同的字段名称

  VALUE_ID      VALUE_TX       FIELD_NAME     Version_ID
      1          Yes             Adult           1
      2          18              Age             1
      3          Black           Eye Color       1 
      4          Yes             Is_Adult        2
      5          25              Years_old       2
      6          Brown           Color_of_Eyes   2

我有一个名为 Submitted 的表,如下所示:

  Version_ID   Version_Name
     1         TEST_RUN
     2         REAL_RUN

我需要一个看起来像这样的结果集:

  Submitted_Name    Adult?     Age     Eye_Color
     TEST_RUN       Yes        18      Black
     REAL_RUN       Yes        25      Brown

我尝试了以下方法:

  SELECT * FROM (
                  select value_Tx, field_name, version_id
                    from VALUE
                )
          PIVOT (max (value_tx) for field_name in (('Adult', 'Is_Adult')   as 'Adult?', ('Age', 'Years_old') as 'Age', ('Eye Color', 'Color_of_Eyes') as 'Eye_Color')
           );

我究竟做错了什么?如果我需要添加任何其他详细信息/数据,请告诉我。

提前致谢!

我收到的错误消息如下:

ORA-00907: missing right parenthesis

标签: sqloraclepivot

解决方案


我会更改子查询中的字段名称:

SELECT *
FROM (select value_Tx,
             (case when field_name in ('Adult', 'Is_Adult') then 'Adult?'
                        field_name in ('Age', 'Years_old') then 'Age'
                        field_name in ('Eye Color', 'Color_of_Eyes') then 'Eye_Color'                        
                   else field_name
              end) as field_name, version_id
      from VALUE
     )
PIVOT (max(value_tx) for field_name in ('Adult?', 'Age', 'Eye_Color'));

推荐阅读