Sql 在oracle中将数据列成行
数据以表格格式显示在屏幕截图中。我想转换成下面提到的所需格式 表1说明: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 使用联合体 例如:
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;