SQL* Plus Пользовательский сводный отчет - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть требование для создания следующего сводного отчета, который выглядит следующим образом:

enter image description here

Моя проблема в том, что

  1. Я понятия не имею, как мне заполнить данные подсчета в этом пользовательском отчете.
  2. Я не знаю, как поместить их в табличное представление, подобное приведенному выше в текстовом документе. Это не HTML.

Пока я знаю только, как сделать первую строку и столбец без табличного представления.

Вот мои коды.

SET HEADING OFF;
SET LINESIZE 200;
SET SPACE 0; 
SET ECHO OFF;
SET FEEDBACK OFF;
SET VERIFY OFF;
SET MARKUP HTML OFF SPOOL OFF;
SET TERMOUT OFF; --Do not show output to the screen.
SET NEWPAGE NONE; --Remove the first blank line at the top of the page and between queries.

TTITLE LEFT "REPORT NAME" RIGHT "PAGE : " SQL.PNO SKIP 1 -
LEFT        "--------------------------------" RIGHT "DATE : " _DATE SKIP 1 -
LEFT "A) TOTAL RECORDS " RIGHT total_records; -- Cannot output variable in the title.
LEFT "B) MATCHED RECORDS " RIGHT matched_records; -- Cannot output variable in the title.
LEFT "C) UNMATCHED RECORDS " RIGHT matched_records; -- Cannot output variable in the title.
BTITLE LEFT "E N D";

total_records - это вставка в оператор.

SELECT COUNT(*) INTO total_records FROM TABLE;

Я не делал сопоставленные записи и несопоставленные записи. Но я могу думать только о

  1. Выбор оператора в курсоре.
  2. L oop в курсоре.
  3. Увеличение числа совпадений, когда есть совпадение.
  4. Однажды l oop fini sh. непревзойденное количество = общее количество - соответствующее число.

Я не думаю, что это самый эффективный способ. Но, если у вас есть лучший способ, дайте мне знать.

1 Ответ

1 голос
/ 10 апреля 2020

Что-то вроде этого звонит в колокол? Пример основан на примере схемы Скотта:

SQL> select 'Total records' name, count(*) cnt
  2    from emp
  3  union all
  4  select 'Matched count', sum(case when deptno = 10 then 1 else 0 end)
  5    from emp
  6  union all
  7  select 'Unmatched count', sum(case when deptno = 10 then 0 else 1 end)
  8    from emp;

NAME                   CNT
--------------- ----------
Total records           14
Matched count            3
Unmatched count         11

SQL>
...