DB2行列轉換 pivot unpovit

2021-08-21 14:27:43 字數 3592 閱讀 1522

背景:最近在開發專案時,涉及到基礎指標的調整,相關復合指標及下游依賴指標**均需要全部重跑的問題。

案例:現在有乙個水果表,記錄了4個季度的銷售數量,現在要將每種水果的每個季度的銷售情況用多行資料展示。

建立表和資料

進行行轉列處理

於是,就只能換另外一種方法來處理:參照下圖,注意這裡values(1,2,3),(4,5,6)為行值,各行對應列中的值 字元型別必須一致,否則會報錯,

理解上圖中的方法後,我們再回過頭去將水果銷售表由行轉化為列

我們再回到背景提出的問題,etl.job_seq為依賴配置表,job_nm為任務名,pre_job為前置任務名,實際開發中有上百個任務,若其中乙個任務指令碼發生調整則依賴此任務的指令碼均需重跑,故現在要把依賴此任務的指令碼全部找出來並展示到1列下,插入以下案例的實驗資料。

從這裡可以看出:a1的下游依賴為a2, a2的下游依賴為a3,a3的下游依賴為a4和b3,我們將查詢出的層級依賴全部展示到1列下

select   distinct t.job_nm

from

(select nvl(t0.job_nm,'none') as job_nm0

,nvl(t1.job_nm,'none')as job_nm1

,nvl(t2.job_nm,'none')as job_nm2

,nvl(t3.job_nm,'none')as job_nm3

from etl.job_seq t0 --第0層依賴(基礎指標)

left join etl.job_seq t1 --第1層依賴(復合指標)

on t0.job_nm=t1.pre_job

left join etl.job_seq t2 --第2層依賴(復合指標)

on t1.job_nm=t2.pre_job

left join etl.job_seq t3 --第3層依賴 (復合指標)

這便是我們需要達到的目的,當傳入調整的指標**,即可全部找到下游指標碼,並對這些指標進行批量重跑。

update etl.job_seq set job_sts='waiting' where job_nm in (exec_sql);

這個大家在平常的用法當中比較常見,用decode函式即可處理,這裡就不做具體說明了。

參考文件:1.

2.

DB2行列轉換

在db2資料庫中常用函式講db2行列轉換 select column1,replace replace xml2clob xmlagg xmlelement name a,column2 as name1 form tablename where 1 0 group by column1 將不需要行...

db2修改列型別

alter table salary data alter column salary setdata type decimal 6,2 alter table department addrating char 1 如果修改後出現db2 sql error sqlcode 668時,這個錯誤是表處...

DB2行轉列(多維度)

多維度下進行行列轉換,下面的行列轉換時根據客戶,所屬銀行機構進行的行列轉換。建表 create table cust bank info cust id varchar 10 cust name varchar 100 bank no varchar 100 bank varchar 100 mon...