2012-08-10 34 views
0

我有一個oracle報告,顯示一組值,它可以生成pdf和csv格式。 我必須確保這些值始終顯示最多3位小數。那就是:在Oracle報告中編輯列的值

0.1 --> 0.100 
0.01 --> 0.010 
0 --> 0.000 

Excel中犯規考慮trainling零,所以我用下面的代碼製作Excel中顯示所有3位小數:

select '="'||to_char(value,'90.999')||'"' from table1; 
--The column is declared as NUMBER(10,3) in the table 

現在的數字顯示了在Excel中根據需要,但在pdf格式顯示,如:=「0.000」

任何人都可以請告訴我如何使它在pdf和csv格式一致?

+0

首先,僅僅是明確的,這就是你在Oracle中創建報表報告的產品?不是恰好用於從Oracle數據庫生成報告的SQL語句?你使用的是什麼版本的Oracle報告?報告中的分發設置是什麼? – 2012-08-10 05:12:21

+0

是的!我正在使用sql查詢從數據庫獲取數據並使用紙張佈局來生成報告。我正在使用Oracle報告生成器10.1.2 – Haripriyan 2012-08-10 05:56:39

+0

將Oracle報告中的字段的格式掩碼設置爲「0.000」,然後一旦生成Excel報告,手動設置列格式以顯示小數點?甚至perhpas使用自定義的一塊VBA自動爲你做。 – Ollie 2012-08-10 08:25:50

回答

1

您可以在運行時評估報告的格式參數,並使用DECODE語句或CASE語句來確定列的哪種輸出格式/值。

我認爲這將實現你正在瞄準的東西。一個結構化的報告使用相同的查詢csv或pdf輸出。

+0

謝謝。我唯一關心的是性能問題。如果有大約5000個值,那麼解碼將不得不進行很多次。這不會讓事情變慢嗎? – Haripriyan 2012-08-10 11:31:16

+0

我懷疑它會對5000行的表產生重大影響。這是(相對)很少的行數。最好的辦法是通過解釋計劃運行查詢並在前後比較來進行檢查。 – OraNob 2012-08-13 08:56:42

-1

在我的項目我嘗試以下方法,

  IF :DESFORMAT='SPREADSHEET' THEN 
        :CP_2:= '="'||:cmdt_grp_cd||'"'; 
      ELSE 
        :CP_2:=:cmdt_grp_cd; 
      END IF;