2014-02-12 59 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