2014-02-12 60 views
0

新來這個網站,所以我可能不會被格式化的東西吧甲骨文sqlplus的報告計算列

我有了,我似乎無法找出一個非常獨特需求的的SQLPlus報告。我需要做的是根據中斷欄的總值顯示一段文字,說'可用'或'完整'。

下面是報告中的樣子:

date column 1 column 2  count 
===== ======== ========  ===== 
1/5/14 ABC   ABC   10 
     DEF   DEF   20 
******       ----- 
total        30 - this would be a normal compute when break on date 

我需要做的是比較的是總計數場(30在這種情況下),並且如果它是>的硬編碼值(比方說20)打印'全',否則'可用'。我願意接受任何建議,如果有方法可以將文本替換爲其他地方的文本或打印在另一行或某處(或者即使我可以讓標籤說文本我想要)。我遇到的問題是在sqlplus報告中應用該比較邏輯。

任何想法將不勝感激。 非常感謝。

馬克

回答

0

SQLPlus只有基本的報告功能。特別是,你不能真正定製它的大部分功能,如BREAKCOMPUTE SUM

但是,您可以使用所有SQL功能,以便您可以自定義您的SQL以獲得所需的結果。類似這樣的:

SQL> WITH DATA AS (
    2 SELECT DATE '2014-05-01' d, 'ABC' c1, 'ABC' c2, 10 cnt FROM dual UNION ALL 
    3 SELECT DATE '2014-05-01' d, 'DEF' c1, 'DEF' c2, 20 cnt FROM dual UNION ALL 
    4 SELECT DATE '2014-06-01' d, 'GHI' c1, 'GHI' c2, 10 cnt FROM dual UNION ALL 
    5 SELECT DATE '2014-06-01' d, 'JKL' c1, 'JKL' c2, 5 cnt FROM dual 
    6 ) 
    7 SELECT CASE 
    8   WHEN GROUPING(c1) = 1 THEN '**Total**' 
    9   ELSE to_char(d, 'dd/mm/yyyy') 
10   END dt, 
11   c1, c2, SUM(cnt), 
12   CASE 
13   WHEN GROUPING(c1) = 1 AND SUM(cnt) > 20 THEN 'Full' 
14   WHEN GROUPING(c1) = 1 AND SUM(cnt) <= 20 THEN 'Available' 
15   END AVAILABILITY 
16 FROM DATA 
17 GROUP BY d, ROLLUP ((c1, c2)); 

DT   C1 C2 SUM(CNT) AVAILABILITY 
---------- --- --- ---------- ------------ 
01/05/2014 ABC ABC   10 
01/05/2014 DEF DEF   20 
**Total**     30 Full 
01/06/2014 GHI GHI   10 
01/06/2014 JKL JKL   5 
**Total**     15 Available 

6 rows selected 

欲瞭解更多信息,請聯繫:excellent article about GROUP BY, ROLLUP and CUBE by Rob van Wijk

+0

這是我一定會記住的優秀信息。然而,由於客戶需求的改變,我必須改變我的方法,以簡化它。再次感謝。 – markf