Sql 将行转换为列Oracle

Sql 将行转换为列Oracle,sql,oracle11g,pivot,Sql,Oracle11g,Pivot,这已经被问了好几次,并且得到了同样多的回答,但这是不同的,因为: 这是在Oracle11g中——我看到的其他示例是在SQL Server中使用StUFF函数 这需要连接两个表以获取信息 让我解释一下 这是保存字段名和文件ID的表 创建表响应单元元数据 文件ID号10不为空, 字段编号4不为空, 字段名称VARCHAR250字节不为空, 字段类型VARCHAR250字节不为空 ; 这是一个表,它保存每个文件的记录,但记录是分开的 创建表响应\u详细信息 文件ID号10, REC_FLD_1 VAR

这已经被问了好几次,并且得到了同样多的回答,但这是不同的,因为:

这是在Oracle11g中——我看到的其他示例是在SQL Server中使用StUFF函数 这需要连接两个表以获取信息 让我解释一下

这是保存字段名和文件ID的表

创建表响应单元元数据 文件ID号10不为空, 字段编号4不为空, 字段名称VARCHAR250字节不为空, 字段类型VARCHAR250字节不为空 ; 这是一个表,它保存每个文件的记录,但记录是分开的

创建表响应\u详细信息 文件ID号10, REC_FLD_1 VARCHAR2300字节, REC_FLD_2 VARCHAR2300字节, REC_FLD_3 VARCHAR2300字节, REC_FLD_4 VARCHAR2300字节, REC_FLD_5 VARCHAR2300字节, REC_FLD_6 VARCHAR2300字节, REC_FLD_7 VARCHAR2300字节, REC_FLD_8 VARCHAR2300字节, REC_FLD_9 VARCHAR2300字节, REC_FLD_10 VARCHAR2300字节, REC_FLD_11 VARCHAR2300字节, REC_FLD_12 VARCHAR2300字节, REC_FLD_13 VARCHAR2300字节, REC_FLD_14 VARCHAR2300字节, REC_FLD_15 VARCHAR2300字节, REC_FLD_16 VARCHAR2300字节, REC_FLD_17 VARCHAR2300字节, REC_FLD_18 VARCHAR2300字节, REC_FLD_19 VARCHAR2300字节, REC_FLD_20 VARCHAR2300字节 ; 插入数据

在响应_元数据文件_ID、字段_编号、字段_名称、字段_类型值1,1、'REC_ID'、'NUMBER'中插入; 在响应\元数据文件\ ID、字段\编号、字段\名称、字段\类型值1,2、'EMAIL'、'VARCHAR2'中插入; 在响应\元数据文件\ ID、字段\编号、字段\名称、字段\类型值1,3、'CAMP'、'VARCHAR2'中插入; 在响应\元数据文件\ ID、字段\编号、字段\名称、字段\类型值1,4、'ACTION'、'VARCHAR2'中插入; 在响应元数据文件中插入ID、字段号、字段名、字段类型值1,5、'DESC'、'VARCHAR2'; 在响应\元数据文件\ ID、字段\编号、字段\名称、字段\类型值1,6、'TIME','VARCHAR2'中插入; 在响应_元数据文件_ID、字段_编号、字段_名称、字段_类型值1,7、'CHANNEL'、'NUMBER'中插入; 在响应元数据文件中插入ID、字段号、字段名、字段类型值1,8、'STATUS'、'VARCHAR2'; 在响应_元数据文件_ID、字段_编号、字段_名称、字段_类型值1,9、'DI_代码'、'VARCHAR2'中插入; 在响应\元数据文件\ ID、字段\编号、字段\名称、字段\类型值1,10、'CUSTOM'、'VARCHAR2'中插入; 在响应_元数据文件_ID、字段_编号、字段_名称、字段_类型值2,1、'REC_ID'、'NUMBER'中插入; 在响应元数据文件中插入ID、字段编号、字段名称、字段类型值2,2、'EMAIL'、'VARCHAR2'; 在响应\元数据文件\ ID、字段\编号、字段\名称、字段\类型值2,3、'CAMP'、'VARCHAR2'中插入; 在响应\元数据文件\ ID、字段\编号、字段\名称、字段\类型值2,4、'ACTION'、'VARCHAR2'中插入; 在响应元数据文件中插入ID、字段编号、字段名称、字段类型值2,5、'DESC'、'VARCHAR2'; 在响应_元数据文件_ID、字段_编号、字段_名称、字段_类型值3,1、'REC_ID'、'NUMBER'中插入; 在响应元数据文件中插入ID、字段号、字段名、字段类型值3,2、'EMAIL'、'VARCHAR2'; 在响应_元数据文件_ID、字段_编号、字段_名称、字段_类型值3,3、'CAMP'、'VARCHAR2'中插入; 在响应_元数据文件_ID、字段_编号、字段_名称、字段_类型值4,1、'REC_ID'、'NUMBER'中插入; 在响应元数据文件中插入ID、字段号、字段名、字段类型值4,2、'ORGN'、'VARCHAR2'; 在响应元数据文件中插入ID、字段号、字段名、字段类型值4,3、'LOGOS'、'VARCHAR2'; 在响应元数据文件中插入ID、字段编号、字段名称、字段类型值4,4、'ACTN'、'VARCHAR2'; 在响应元数据文件中插入ID、字段号、字段名、字段类型值4,5、'BLANK1'、'VARCHAR2'; 在响应_元数据文件_ID、字段_编号、字段_名称、字段_类型值4,6、'ALERT_ID'、'VARCHAR2'中插入; 在响应元数据文件中插入ID、字段号、字段名、字段类型值4,7、'DEVNUM'、'NUMBER'; 在响应_元数据文件_ID、字段_编号、字段_名称、字段_类型值4,8、'RES_CODE'、'VARCHAR2'中插入; 在响应_元数据文件_ID、字段_编号、字段_名称、字段_类型值4,9、'STRAT_ID'、'VARCHAR2'中插入; 在响应_元数据文件_ID、字段_编号、字段_名称、字段_类型值4,10、'COMP_FLAG'、'VARCHAR2'中插入; 在响应元数据文件中插入ID、字段号、字段名、字段类型值4,11、'AUDLOG'、'VARCHAR2'; 在响应_元数据文件_ID、字段_编号、字段_名称、字段_类型值4,12、'STARTTIME','VARCHAR2'中插入; 在响应\元数据文件\ ID、字段\编号、字段\名称、字段\类型值4,13、'DURATION'、'VARCHAR2'中插入; 在响应详细信息文件中插入ID、1号记录、2号记录、3号记录、4号记录、5号记录、6号记录、7号记录、8号记录、9号记录、10号记录、11号记录、12号记录 ,REC_FLD_14,REC_FLD_15,REC_FLD_16,REC_FLD_17,REC_FLD_18,REC_FLD_19,REC_FLD_20; u值8,'67537','Line','81433','1','15062012','DELIVERED'67537',',,,,,,,,,,,,; 在响应细节文件中插入响应细节文件。详情文件包括:ID、1号、1号、2号、3号、4号、4号、4号、5号、5号、5号、6号、6号、6号、6号、7号、7号、8号、8号、9号、9号、10号、10号、10号、11号、11号、12号、12号、12号、13号、13号、13号、13号、14号、14号、14号、14号、16号、16号、16号、16号、16号、16号、16号、18、18号、18号、18号、18号、18、18号、18号、18号、18、18号、18、18、18号、18号、18号、18、18号、18号、18、18、18号、18、18、18、18号、18号、18号、18、18、18、18、18、18、18、18、18、18、18、18例如,REC_FLD_19,REC_FLD_20值8,'67551','Line','81430','1','15062012','DELIVERED','67551',,,,,,,,,,,,; 在响应细节文件中插入响应细节文件。详情文件包括:ID、1号、1号、2号、3号、4号、4号、4号、5号、5号、5号、6号、6号、6号、6号、7号、7号、8号、8号、9号、9号、10号、10号、10号、11号、11号、12号、12号、12号、13号、13号、13号、13号、14号、14号、14号、14号、16号、16号、16号、16号、16号、16号、16号、18、18号、18号、18号、18号、18、18号、18号、18号、18、18号、18、18、18号、18号、18号、18、18号、18号、18、18、18号、18、18、18、18号、18号、18号、18、18、18、18、18、18、18、18、18、18、18、18例如,REC_FLD_19,REC_FLD_20值8,'67579','Line','81403','1','15062012','DELIVERED','67579',,,,,,,,,,,,; 在响应细节文件中插入响应细节文件。详情文件包括:ID、1号、1号、2号、3号、4号、4号、4号、5号、5号、5号、6号、6号、6号、6号、7号、7号、8号、8号、9号、9号、10号、10号、10号、11号、11号、12号、12号、12号、13号、13号、13号、13号、14号、14号、14号、14号、16号、16号、16号、16号、16号、16号、16号、18、18号、18号、18号、18号、18、18号、18号、18号、18、18号、18、18、18号、18号、18号、18、18号、18号、18、18、18号、18、18、18、18号、18号、18号、18、18、18、18、18、18、18、18、18、18、18、18例如,REC_FLD_19,REC_FLD_20值8,'67593','Line','81452','1','15062012','DELIVERED','67593',,,,,,,,,,,,; 在响应细节文件中插入响应细节文件。详情文件包括:ID、1号、1号、2号、3号、4号、4号、4号、5号、5号、5号、6号、6号、6号、6号、7号、7号、8号、8号、9号、9号、10号、10号、10号、11号、11号、12号、12号、12号、13号、13号、13号、13号、14号、14号、14号、14号、16号、16号、16号、16号、16号、16号、16号、18、18号、18号、18号、18号、18、18号、18号、18号、18、18号、18、18、18号、18号、18号、18、18号、18号、18、18、18号、18、18、18、18号、18号、18号、18、18、18、18、18、18、18、18、18、18、18、18例如,REC_FLD_19,REC_FLD_20值8,'67607','Line','81453','1','15062012','DELIVERED','67607',,,,,,,,,,,,; 在响应细节文件中插入响应细节文件。详情文件包括:ID、1号、1号、2号、3号、4号、4号、4号、5号、5号、5号、6号、6号、6号、6号、7号、7号、8号、8号、9号、9号、10号、10号、10号、11号、11号、12号、12号、12号、13号、13号、13号、13号、14号、14号、14号、14号、16号、16号、16号、16号、16号、16号、16号、18、18号、18号、18号、18号、18、18号、18号、18号、18、18号、18、18、18号、18号、18号、18、18号、18号、18、18、18号、18、18、18、18号、18号、18号、18、18、18、18、18、18、18、18、18、18、18、18,REC_FLD_19,REC_FLD_20; 4,'28072','16','1','189325','ins/code.com/20120621','6551','WID','VOLN',等等,"N",;B10100’,'41061.6740856481’,'14’,,,,,,,; 在响应细节文件中插入响应细节文件。详情文件包括:ID、1号、1号、2号、3号、4号、4号、4号、5号、5号、5号、6号、6号、6号、6号、7号、7号、8号、8号、9号、9号、10号、10号、10号、11号、11号、12号、12号、12号、13号、13号、13号、13号、14号、14号、14号、14号、16号、16号、16号、16号、16号、16号、16号、18、18号、18号、18号、18号、18、18号、18号、18号、18、18号、18、18、18号、18号、18号、18、18号、18号、18、18、18号、18、18、18、18号、18号、18号、18、18、18、18、18、18、18、18、18、18、18、18,REC_FLD_19,REC_FLD_20; u值4,'28072','16','1','189325002','ins/code.com/20120622','6551','CON',等等,"VOLN","N","N",;B10100’,'41061.6978240741’,'124’,,,,,,,; 在响应细节文件中插入响应细节文件。详情文件包括:ID、1号、1号、2号、3号、4号、4号、4号、5号、5号、5号、6号、6号、6号、6号、7号、7号、8号、8号、9号、9号、10号、10号、10号、11号、11号、12号、12号、12号、13号、13号、13号、13号、14号、14号、14号、14号、16号、16号、16号、16号、16号、16号、16号、18、18号、18号、18号、18号、18、18号、18号、18号、18、18号、18、18、18号、18号、18号、18、18号、18号、18、18、18号、18、18、18、18号、18号、18号、18、18、18、18、18、18、18、18、18、18、18、18,REC_FLD_19,REC_FLD_20值4,'28075','15','30','443433001','ins/code.com/20120623','5908','AMP',等等,"VOLN","N","N",;B10100’,'41061.6737268519’,'13’,,,,,,,; 在响应细节文件中插入响应细节文件。详情文件包括:ID、1号、1号、2号、3号、4号、4号、4号、5号、5号、5号、6号、6号、6号、6号、7号、7号、8号、8号、9号、9号、10号、10号、10号、11号、11号、12号、12号、12号、13号、13号、13号、13号、14号、14号、14号、14号、16号、16号、16号、16号、16号、16号、16号、18、18号、18号、18号、18号、18、18号、18号、18号、18、18号、18、18、18号、18号、18号、18、18号、18号、18、18、18号、18、18、18、18号、18号、18号、18、18、18、18、18、18、18、18、18、18、18、18,REC_FLD_19,REC_FLD_20值4,'28075','15','30','4443433','ins/code.com/20120624','5908','CON',等等,"VOLN","N","N",;B10100’,'41061.6953240741’,'113’,,,,,,,; 在响应细节文件中插入响应细节文件。详情文件包括:ID、1号、1号、2号、3号、4号、4号、4号、5号、5号、5号、6号、6号、6号、6号、7号、7号、8号、8号、9号、9号、10号、10号、10号、11号、11号、12号、12号、12号、13号、13号、13号、13号、14号、14号、14号、14号、16号、16号、16号、16号、16号、16号、16号、18、18号、18号、18号、18号、18、18号、18号、18号、18、18号、18、18、18号、18号、18号、18、18号、18号、18、18、18号、18、18、18、18号、18号、18号、18、18、18、18、18、18、18、18、18、18、18、18,REC_FLD_19,REC_FLD_20; 4,'28078','11','1','2576141','ins/code.com/20120625','6681','CON','VOLN',等等,"N",;B10100’,'41061.6764236111’,'81’,,,,,,,; 现在的问题是

我希望数据以这种方式显示

文件ID记录ID电子邮件营地行动描述时间通道状态DI代码自定义 1 67537线路81433 1 15062012交付67537 1 67551线路81430 1 15062012交付67551 1 67579线路81403 1 15062012交付67579 67593线81452 15062012交付67593 1 67607线路81453 1 15062012交付67607 文件ID记录ID源标识ACTN BLANK1警报ID DEVNUM RES代码STRAT ID COMP标志AUDLOG STARTTIME持续时间 4 28072 16 1 189325 ins/code.com/20120621 6551 WID VOLN;B10100 1/06/2012 16:10 14 4 28072 16 1 1893250 ins/code.com/20120622 6551 CON VOLN;B10100 1/06/2012 16:44 124 4 28075 15 30 4434330 ins/code.com/20120623 5908安培电压;B10100 1/06/2012 16:10 13 4 28075 15 30 4443433 ins/code.com/20120624 5908 CON VOLN;B10100 1/06/2012 16:41 113 4 28078 11 2576141 ins/code.com/20120625 6681 CON VOLN;B10100 1/06/2012 16:14 81 它需要的工作方式是元数据表中的每个文件ID都有字段号。这些文件编号是明细表中的列

我在Oracle中尝试过XML PIVOT,但它没有 t工作,因为这些列将创建多个节点

我试过只做旋转运动,但不起作用。这需要是动态的-文件ID可以有不超过30个的任意数量的字段


这需要是一个存储的过程或查询,因为我没有生成ETL的权限。

尝试以下方法生成脚本:

select 'select '||FILE_ID||' FILE_ID,'||
  ltrim(sys_connect_by_path('REC_FLD_'||FIELD_NUMBER||' "'||FIELD_NAME||'"',','),',')||
  ' from RESPONSE_DETAILS where FILE_ID=' ||FILE_ID||';'
  from (select t.*,count(*) over (partition by FILE_ID) cnt from RESPONSE_METADATA t)
 where cnt=FIELD_NUMBER start with FIELD_NUMBER=1 
connect by prior FILE_ID=FILE_ID and prior FIELD_NUMBER=FIELD_NUMBER-1

添加了双引号,因为某些列名是保留的DESC,例如

所需结果的两个块如何相关?您的测试数据有文件id 4和8,您的输出有1和4?因此,如果我正确理解您的需求,那么您希望执行某种列名称本地化REC\u FLD\u 1->REC\u id?您必须对每个文件\ u ID使用一个动态查询,但为什么不在客户端执行此操作呢?还是我做错了什么?@PeterLang REC_FLD_1与REC_IDNahuel Fouilleul没有任何关系。谢谢你的剧本——太棒了——不过我忘了提一下——我才刚开始读甲骨文。我尝试创建PL/SQL并运行返回的select语句,但它没有为我提供select语句的表/结果集。我在用蟾蜍。你能帮忙吗。我非常感谢你-我已经接近了-感谢你。感谢你添加了双qoutes-为了简单起见-我缩短了列名-在我的表格中它实际上被称为Description_Value谢谢@NahuelFouilleul..它工作得非常好,正如我所希望的。谢谢你的帮助。