我有一张如下表
structure_no | element_name
1 | BASIC
1 | HRA
2 | BASIC
2 | HRA
我想获得值
structure_no | element1 | element2
1 | BASIC | HRA
2 | BASIC | HRA
请帮我构建SQL查询
答案 0 :(得分:0)
我不认为这可以做到。没有办法拥有一定数量的字段。您可以使用structure_no
获取所有记录的计数,然后您可以选择structure_no
的所有记录,但我不相信您尝试执行的操作可以通过查询完成。
也许重新考虑你的表结构和关系的使用。
答案 1 :(得分:0)
使用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
您还可以使用解码和聚合功能,如下所示:
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