Oracle

Oracle 程序更改透視數據以取消透視並推送到不同的目標

  • November 13, 2020

我有一個 PL/SQL 過程,它在執行時採用逗號分隔的字元串,將其拆分並推入表中。這裡給出了過程和表的範例:過程是 push_data。目前插入數據的表是 push_data_temp。

https://dbfiddle.uk/?rdbms=oracle_18&fiddle=fae31c11a4ad6205ebcaa418a0bffffd

現在根據要求,我需要編寫一個新程序,其中邏輯將保持與拆分數據相同,但在新表 push_data_pivot(數據透視內的結構)中,應顯示以這種格式旋轉的數據。

例如:如果 push_data_temp 中的目前數據是: 在此處輸入圖像描述

數據應該在新過程中進入 push_data_pivot,如下所示: 在此處輸入圖像描述

邏輯應該保持不變,只是插入的數據將進入列而不是行,填充 id 和 value 列。

這裡的列id是兩個表中傳遞的字元串的唯一標識符。基本上,它與原始表格中使用的相同。

PUSH_DATA_PIVOT:

create table PUSH_DATA_PIVOT
(
id_pk NUMBER,
 id NUMBER,
 label_id number,
 label varchar2(4000),
 value varchar2(4000)
);

insert into push_data_pivot values(1,null,'COL01',null);
insert into push_data_pivot values(1,null,'COL02',null);
insert into push_data_pivot values(1,null,'COL03',null);
insert into push_data_pivot values(1,null,'COL04',null);
insert into push_data_pivot values(1,null,'COL05',null);
insert into push_data_pivot values(1,null,'COL06',null);
insert into push_data_pivot values(1,null,'COL07',null);
insert into push_data_pivot values(1,null,'COL08',null);
insert into push_data_pivot values(1,null,'COL09',null);
insert into push_data_pivot values(1,null,'COL10',null);
insert into push_data_pivot values(1,null,'COL11',null);
insert into push_data_pivot values(1,null,'COL12',null);
insert into push_data_pivot values(1,null,'COL13',null);
insert into push_data_pivot values(1,null,'COL14',null);

範例數據是單個字元串,用於單個 label_id 和相應的一組列標籤值。但是實際表會在 id 列的基礎上插入多個此類字元串,與原始要求相同。

唯一的要求是,使用新的目標表作為 push_data_pivot 和未透視格式的數據創建新過程。拆分邏輯將與現有程序中的相同。

我得到了這個問題的答案。

https://dbfiddle.uk/?rdbms=oracle_18&fiddle=412a6e27a22741ee1c31eee4a3f2bf3a

為什麼不簡單地取消旋轉孔表

SELECT * FROM push_data_temp;
ID_PK | 身份證 | COL1 | COL2 | COL3 | COL4 | COL5 | COL6 | COL7 | COL8 | COL9 | COL10 | COL11 | COL12 | COL13 | COL14
----: | --: | :--------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------- | :--------- | :------------------ | :----------------------------------- | :------------- | :--- | :--- | :---- | :---- | :------- | :---- | :----
 *空*| 110 | BYU 負責人的項目名稱 | “這些值是,<br>“完全”符合團隊所做的需求和分析。<br>也很難,<br>準備一個場景,儘管這很困難。這個使用者故事將稍微複雜一點,但這取決於團隊” | “活躍” | “殘疾” | “25 噸燃料” | “www.examplesites.com/html.asp&net;” | “憂慮” | *空*| *空*| *空* | “25” | “穩定” | *空* | *null*  
 *null*| 111 | IT 負責人的項目名稱 | “這些值是,<br>“完全”符合團隊所做的需求和分析。<br>也很難,<br>準備一個場景,儘管這很困難。這個使用者故事將稍微複雜一點,但這取決於團隊” | “活躍” | “殘疾” | “25 噸燃料” | “www.examplesites.com/html.asp&net;” | “憂慮” | *空*| *空*| *空* | “25” | “穩定” | *空* | *空值* 
create table PUSH_DATA_PIVOT
(
id_pk NUMBER,
  id NUMBER,
  label_id number,
  label varchar2(4000),
  value varchar2(4000)
);
INSERT INTO PUSH_DATA_PIVOT
SELECT 1,ID,1,label,value
FROM
(SELECT * FROM push_data_temp
UNPIVOT INCLUDE NULLS(
    value
    FOR label 
    IN (
        col1 AS 'COL01', 
        col2 AS 'COL02', 
        col3 AS 'COL03', 
        col4 AS 'col4', 
        col5 AS 'col5', 
        col6 AS 'COL06', 
        col7 AS 'COL07', 
        col8 AS 'COL08', 
        col9 AS 'COL09', 
        col10 AS 'COL10', 
        col11 AS 'COL11', 
        col12 AS 'COL12', 
        col13 AS 'COL13', 
        col14 AS 'COL14'
    )
)) t1;
28 行受影響
select * from push_data_pivot;
ID_PK | 身份證 | LABEL_ID | 標籤 | 價值 
----: | --: | -------: | :---- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 1 | 110 | 1 | COL01 | BYU 負責人的項目名稱 
 1 | 110 | 1 | COL02 | “這些值是,<br>“完全”符合團隊所做的需求和分析。<br>也很難,<br>準備一個場景,儘管這很困難。這個使用者故事將稍微複雜一點,但這取決於團隊”
 1 | 110 | 1 | COL03 | “積極的” 
 1 | 110 | 1 | col4 | “殘疾人” 
 1 | 110 | 1 | col5 | “25噸燃料” 
 1 | 110 | 1 | COL06 | “www.examplesites.com/html.asp&net;” 
 1 | 110 | 1 | COL07 | “顧慮” 
 1 | 110 | 1 | COL08 | *空* 
 1 | 110 | 1 | COL09 | *空* 
 1 | 110 | 1 | COL10 | *空值*                                                                                                                                                                                                                                                          
 1 | 110 | 1 | COL11 | “25” 
 1 | 110 | 1 | COL12 | “穩定的” 
 1 | 110 | 1 | COL13 | *空* 
 1 | 110 | 1 | COL14 | *空值*                                                                                                                                                                                                                                                          
 1 | 111 | 1 | COL01 | IT 主管的項目名稱 
 1 | 111 | 1 | COL02 | “這些值是,<br>“完全”符合團隊所做的需求和分析。<br>也很難,<br>準備一個場景,儘管這很困難。這個使用者故事將稍微複雜一點,但這取決於團隊”
 1 | 111 | 1 | COL03 | “積極的” 
 1 | 111 | 1 | col4 | “殘疾人” 
 1 | 111 | 1 | col5 | “25噸燃料” 
 1 | 111 | 1 | COL06 | “www.examplesites.com/html.asp&net;” 
 1 | 111 | 1 | COL07 | “顧慮” 
 1 | 111 | 1 | COL08 | *空* 
 1 | 111 | 1 | COL09 | *空* 
 1 | 111 | 1 | COL10 | *空值*                                                                                                                                                                                                                                                          
 1 | 111 | 1 | COL11 | “25” 
 1 | 111 | 1 | COL12 | “穩定的” 
 1 | 111 | 1 | COL13 | *空* 
 1 | 111 | 1 | COL14 | *空值*                                                                                                                                                                                                                                                          

db<>在這裡擺弄

引用自:https://dba.stackexchange.com/questions/279495