国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

將縱向數據列表轉化為橫向數據字段

2024-07-21 02:35:39
字體:
來源:轉載
供稿:網友

  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 --得到生產線列表
   ;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汕头市| 渝北区| 精河县| 原平市| 城市| 莎车县| 鄂托克前旗| 武邑县| 利津县| 汤阴县| 富平县| 玛曲县| 阜南县| 万源市| 阳信县| 富民县| 博爱县| 阳山县| 黄大仙区| 大安市| 徐州市| 常宁市| 新龙县| 保德县| 诸城市| 汤原县| 赣州市| 镇安县| 四子王旗| 霞浦县| 和顺县| 海原县| 尼木县| 洛隆县| 健康| 临颍县| 河西区| 大同县| 井陉县| 海晏县| 保定市|