熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

在報表視圖中實現分類顯示

2013-11-13 16:08:31  來源: Oracle 

   前言 
  在實現用戶的報表過程中用戶經常會提出一個看似很合符情理的要求但實現起來卻困難重重如下
  收款明細表<省略其它字段>
  
  數據樣式
  日期    收款金額
   
   
   
   
  
  
  報表樣式
  日期    收款金額
   
  <Null>    <沒有值與上一筆記錄相同日期為>
   
  <Null>    <沒有值與上一筆記錄相同日期為>
  
  
   實現思路
  利用OVER函數算出當前記錄在記錄集中出現的次數如果次數大於則不返回NULL
  
   實例演練 
   測試環境
  Drop Table Test_ReRecord;
  create table Test_ReRecord
  (
    BillDate Date not null
    Money   Number() Not Null
  )
  /
  Insert Into Test_ReRecord 
   Values
   (
    To_Date(yyyymmdd)
    );
  Insert Into Test_ReRecord 
   Values
   (
    To_Date(yyyymmdd)
    );
  Insert Into Test_ReRecord 
   Values
   (
    To_Date(yyyymmdd)
    );
  Insert Into Test_ReRecord 
   Values
   (
    To_Date(yyyymmdd)
    );
  Insert Into Test_ReRecord 
   Values
   (
    To_Date(yyyymmdd)
    );
  Commit;
  
   SELECT語句講釋
  SELECT 
    DECODE(RNBillDate) BillDate 如果BillDate在原始記錄集中出現超過則顯示空值
    Money
   From
    (
     SELECT 
       BillDate
       Money
       ROW_NUMBER() 通過OVER函數返回相同的BillDate當前出現的次數
      OVER 
       (
        Partition By BillDate 根據BillDate進行分區即遇到不同的BillDateRow_Number就恢復從開始計數
        Order By BillDate 根據BillDate進行排序一般配合Partition By子項使用
       ) RN 
      FROM 
       Test_ReRecord
     );
From:http://tw.wingwit.com/Article/program/Oracle/201311/17880.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.