将列值转换为行值

时间:2014-08-06 18:30:47

标签: sql database

我有一张如下表

   structure_no  |   element_name
        1        |      BASIC
        1        |      HRA
        2        |      BASIC
        2        |      HRA

我想获得值

   structure_no    |  element1   | element2
        1          |  BASIC      |   HRA 
        2          |  BASIC      |   HRA 

请帮我构建SQL查询

2 个答案:

答案 0 :(得分:0)

我不认为这可以做到。没有办法拥有一定数量的字段。您可以使用structure_no获取所有记录的计数,然后您可以选择structure_no的所有记录,但我不相信您尝试执行的操作可以通过查询完成。

也许重新考虑你的表结构和关系的使用。

答案 1 :(得分:0)

  • 解决方案1 ​​

使用Oracle 11G的数据透视选项,您可以执行以下操作:

SELECT *
   FROM   MY_DATA_TABLE
  PIVOT (MIN(ELEMENT_NAME)
   FOR    ELEMENT_NAME  IN ('BASIC' AS ELEMENT1,'HRA' AS ELEMENT2) );

请参阅此处的小提琴:http://sqlfiddle.com/#!4/7f4cd/2

  • 解决方案2:

您还可以使用解码和聚合功能,如下所示:

SELECT STRUCTURE_NO,
MAX(DECODE (ELEMENT_NAME,'BASIC',ELEMENT_NAME)) ELEMENT1,
MAX(DECODE (ELEMENT_NAME,'HRA',ELEMENT_NAME)) ELEMENT2
FROM SAMPLE_TABLE
GROUP BY STRUCTURE_NO;

请参阅此处的小提琴:http://sqlfiddle.com/#!4/7f4cd/4