Sql 在oracle中将数据列成行

Sql 在oracle中将数据列成行,sql,oracle,unpivot,Sql,Oracle,Unpivot,数据以表格格式显示在屏幕截图中。我想转换成下面提到的所需格式 表1说明: Table A (branch_code, branch_name, branch_state, hol1, hol2, hol3....hol100) 预期产量 TAMF046 14/01/2021 TAMF046 15/01/2021 TAMF046 26/01/2021 KERF047 26/01/2021 KERF047 11/03/2021 KERF047 02/04/2021 使用联合体 例如:

数据以表格格式显示在屏幕截图中。我想转换成下面提到的所需格式

表1说明:

Table A
(branch_code, branch_name, branch_state, hol1, hol2, hol3....hol100)
预期产量

TAMF046  14/01/2021
TAMF046  15/01/2021
TAMF046  26/01/2021
KERF047  26/01/2021
KERF047  11/03/2021
KERF047  02/04/2021
使用联合体

例如:

etc

使用union

例如:


etc

这正是
UNPIVOT
的目的

with t(id, c1, c2, c3) as (
  select 1, 'a', 'b', 'c' from dual union all
  select 2, 'aa', 'bb', 'cc' from dual
)
select *
from t
unpivot (
  val
  for col in (
    c1 as 'A1',
    c2 as 'A2',
    c3 as 'A3'
  )
)
val
是新列,它将包含列
c1
c2
c3
中的值

col
是包含
val
来源的列的名称的新列


A1
A2
A3
是要为每个未插入的列在
col
中填充的值(如果您对原始列名没有意见,可以省略这些别名)。

这正是
UNPIVOT
的目的

with t(id, c1, c2, c3) as (
  select 1, 'a', 'b', 'c' from dual union all
  select 2, 'aa', 'bb', 'cc' from dual
)
select *
from t
unpivot (
  val
  for col in (
    c1 as 'A1',
    c2 as 'A2',
    c3 as 'A3'
  )
)
val
是新列,它将包含列
c1
c2
c3
中的值

col
是包含
val
来源的列的名称的新列

A1
A2
A3
是要为每个未插入的列在
列中填充的值(如果您对原始列名没有意见,可以省略这些别名)

这是我尝试的方法,但如果有人有任何其他方法使用动态查询。请分享你的观点


这是我尝试的方法,但如果有人有任何其他方法使用动态查询。请分享您的观点,

有Hundrard列,希望使用动态查询记录数据。有Hundrard列,希望使用动态查询记录数据。因此,我需要提及所有100列和100次需要使用union。谁将执行查询?某个IDE中的用户(比如SQLDeveloper)?将进一步处理数据的某个存储过程?某些后端应用程序通过JDBC?过程在特定时间使用sql developer Jobsy进行调度。您可以在过程中构建查询(只需
listag(column\u name,,'))
从所有\u tab\u cols获取列名)然后使用
executeimmediate
执行它。所以我需要提到所有100列和100次需要使用union。谁将执行查询?某个IDE中的用户(比如SQLDeveloper)?将进一步处理数据的某个存储过程?某些后端应用程序通过JDBC?过程在特定时间使用sql developer Jobsy进行调度。您可以在该过程中构建查询(只需从所有选项卡获取列名),
,然后使用
立即执行
执行查询。
 WITH HOLIDAY 
AS ( 
    SELECT BRANCH_CODE,HOL1,HOL2,HOL3,HOL4,HOL5,HOL6,HOL7,HOL8,HOL9,HOL10,HOL11,HOL12,HOL13,HOL14,HOL15,HOL16,HOL17,HOL18,HOL19,HOL20,HOL21,HOL22,HOL23,HOL24,HOL25,HOL26,HOL27,HOL28,HOL29,HOL30,HOL31,HOL32,HOL33,HOL34,HOL35,HOL36,HOL37,HOL38,HOL39,HOL40,HOL41,HOL42,HOL43,HOL44,HOL45,HOL46,HOL47,HOL48,HOL49,HOL50,HOL51,HOL52,HOL53,HOL54,HOL55,HOL56,HOL57,HOL58,HOL59,HOL60,HOL61,HOL62,HOL63,HOL64,HOL65,HOL66,HOL67,HOL68,HOL69,HOL70,HOL71,HOL72,HOL73,HOL74,HOL75,HOL76,HOL77,HOL78,HOL79,HOL80,HOL81,HOL82,HOL83,HOL84,HOL85,HOL86,HOL87,HOL88,HOL89,HOL90,HOL91,HOL92,HOL93,HOL94,HOL95,HOL96,HOL97,HOL98,HOL99,HOL100 
      FROM CUST_HOLIDAY_MASTER 
      WHERE BRANCH_CODE = I.BRANCH_CODE
    )
SELECT  BRANCH_CODE , COLVALUE FROM abc

unpivot
( colvalue for col in (HOL1,HOL2,HOL3,HOL4,HOL5,HOL6,HOL7,HOL8,HOL9,HOL10,HOL11,HOL12,HOL13,HOL14,HOL15,HOL16,HOL17,HOL18,HOL19,HOL20,HOL21,HOL22,HOL23,HOL24,HOL25,HOL26,HOL27,HOL28,HOL29,HOL30,HOL31,HOL32,HOL33,HOL34,HOL35,HOL36,HOL37,HOL38,HOL39,HOL40,HOL41,HOL42,HOL43,HOL44,HOL45,HOL46,HOL47,HOL48,HOL49,HOL50,HOL51,HOL52,HOL53,HOL54,HOL55,HOL56,HOL57,HOL58,HOL59,HOL60,HOL61,HOL62,HOL63,HOL64,HOL65,HOL66,HOL67,HOL68,HOL69,HOL70,HOL71,HOL72,HOL73,HOL74,HOL75,HOL76,HOL77,HOL78,HOL79,HOL80,HOL81,HOL82,HOL83,HOL84,HOL85,HOL86,HOL87,HOL88,HOL89,HOL90,HOL91,HOL92,HOL93,HOL94,HOL95,HOL96,HOL97,HOL98,HOL99,HOL100) 
)

WHERE COLVALUE IS NOT NULL;