將縱向資料列表轉化為橫向資料字段

2021-09-30 06:54:58 字數 1889 閱讀 7517

1 前言

在實際程式設計過程中,往往會遇到比較**的使用者需求。例如:使用者需要將不同行的資料,合併起來,顯示於字段中的某個列。

例如:第一生產線生產:a,b產品;第二生產線生產:c、d產品,在資料庫中的記錄應為:

生產線 產品

1    a

1    b

2    c

2    d

但是使用者希望我們在介面中顯示的結果為:

生產線 產品

1    a、b

2    c、d

由於form不象pb,可以在前台支援交叉表;使用者又需求對該資料進行某種處理,所以不能放在report中實現,因此實現此類使用者需求,就只能在後台實現了。

實現該使用者需求,大部份程式設計師會選擇使用臨時表,手工插入資料,本文主要論述使用檢視實現該需求的方法。

當然,使用臨時表實現該需求和使用檢視實現該需求的執行效率對比,仁者見仁,智者見智,不在本文中研討。

2 實現思路

2.1 建立乙個表型別,用於將相同生產線不同的產品作為引數進行傳遞

2.2 建立乙個函式,將傳入的資料表型別引數,轉化為字元型別返回

2.3 建立乙個檢視,將縱向的資料轉化為橫向的資料,以字元方式顯示

3 例項演練

--3.1 建立測試環境

--建立資料表型別

create or replace type tp_temptable is table of varchar2(200);

/ --建立函式,將傳入的資料列表轉為橫向字元

create or replace function fn_getlineprod 

(p_lineprod in tp_temptable) 

return varchar2

is l_str varchar2(4000);

i number;

begin

for i in 1..p_lineprod.count loop

if l_str is null then

l_str:=p_lineprod(i);

else 

l_str := l_str || '、' || p_lineprod(i);

end if;

end loop;

return l_str;

end fn_getlineprod;

/ --建立過渡表

drop table t;

create table t (line number,prod varchar2(10));

insert into t values(1,'a');

insert into t values(1,'b');

insert into t values(1,'c');

insert into t values(2,'d');

insert into t values(2,'e');

commit;

--3.2 執行查詢

--查詢語句

select 

t0.line --生產線編號

,fn_getlineprod( --將同一生產線,不同產品的資料列表作為引數傳入自定義函式

cast( --將巢狀表型別轉化為資料表型別

multiset(select prod from t where t.line = t0.line) --將與最外層查詢相同的生產線產品列表,以巢狀表方式返回

as tp_temptable)

) prod

from 

(select distinct line from t) t0 --得到生產線列表

文章出處:飛諾網(

www.firnow.com):

BPM幫助企業將資料轉化為「行動」

本文講的是bpm幫助企業將資料轉化為 行動 大資料以及類似的技術發展趨勢,讓許多企業開始將資訊資源作為業務發展的核心命脈。然而,企業經常面臨的問題是,他們雖然能有效的分析資料,但缺乏乙個有效的方法使用它 利用它。業務流程管理軟體可以提供給企業一種把資料轉化為行動 讓資料更有價值的能力。據報道,大資料...

將KITTI資料集轉化為bag包

具體的實現流程參照此部落格 記錄一下轉化過程中的問題以及解決辦法 1 在轉化過程中,出現找不到對應的txt檔案,這是檔案放置的路徑不對,檢查自己的檔案放置路徑即可 2 轉化過程需要用到pykitti模組,使用pip安裝後,仍然顯示無法載入此模組 could not import pykitti pl...

資料庫 MySql 將單列資料轉化為多列資料

iddata title group title 24144 毅立木火 男24145 毅亮木火 男24146 毅南木火 男24147 毅泰木火 男24148 毅天木火 男24149 毅廷木火 男24150 毅曦木火 男24151 毅璽木火 男24152 毅烜木火 男24153 毅曜木火 男24154...