Рассчитать распределение суммы в отдельной строке в Oracle SQL - PullRequest
0 голосов
/ 13 марта 2020

Я создал следующий запрос:

WITH BASE AS
(
  SELECT
      UTM_FE_SOURCE, TO_CHAR(TIME_DECISION_DATE,'MONTH') TIME_DECISION_MONTH, DECISION_OVERALL,
      CASE
        WHEN UTM_FE_SOURCE = 'PB' THEN 'PB'
        WHEN UTM_FE_SOURCE = 'BB' THEN 'BB'
        WHEN UTM_FE_SOURCE = 'VF' THEN 'VF'
        ELSE 'OTHERS'
      END UTM_SOURCE,
      CASE WHEN DECISION_OVERALL = 'APPROVED' THEN 1 ELSE 0 END FLAG_APPROVED,
      CASE WHEN DECISION_OVERALL = 'REJECTED' THEN 1 ELSE 0 END FLAG_REJECTED,
      CASE WHEN DECISION_OVERALL IN ('APPROVED','REJECTED') THEN 1 ELSE 0 END FLAG_APPROVED_OR_REJECTED
  FROM AP_UWI.ONL_UW_DAILY_DATA
  WHERE TIME_DECISION_DATE BETWEEN TRUNC(SYSDATE-1,'MM') AND TRUNC(SYSDATE-1)
    AND DECISION_OVERALL IN ('APPROVED','REJECTED')
),
BASE1 AS
(
  SELECT
    UTM_SOURCE, TIME_DECISION_MONTH,
    SUM(FLAG_APPROVED) APPROVED,
    SUM(FLAG_REJECTED) REJECTED,
    SUM(FLAG_APPROVED_OR_REJECTED) APPROVED_AND_REJECTED

  FROM BASE
  GROUP BY UTM_SOURCE, TIME_DECISION_MONTH
)
SELECT 
  UTM_SOURCE, TIME_DECISION_MONTH, APPROVED, REJECTED, APPROVED_AND_REJECTED

FROM BASE1
;

Выходные данные для этого запроса: введите описание изображения здесь

Однако я хочу, чтобы выходные данные были: введите описание изображения здесь

Это, в основном, процент распределения строки.

1 Ответ

0 голосов
/ 13 марта 2020

Вы можете попробовать запрос ниже -

WITH BASE AS
(
  SELECT
      UTM_FE_SOURCE, TO_CHAR(TIME_DECISION_DATE,'MONTH') TIME_DECISION_MONTH, DECISION_OVERALL,
      CASE
        WHEN UTM_FE_SOURCE = 'PB' THEN 'PB'
        WHEN UTM_FE_SOURCE = 'BB' THEN 'BB'
        WHEN UTM_FE_SOURCE = 'VF' THEN 'VF'
        ELSE 'OTHERS'
      END UTM_SOURCE,
      CASE WHEN DECISION_OVERALL = 'APPROVED' THEN 1 ELSE 0 END FLAG_APPROVED,
      CASE WHEN DECISION_OVERALL = 'REJECTED' THEN 1 ELSE 0 END FLAG_REJECTED,
      CASE WHEN DECISION_OVERALL IN ('APPROVED','REJECTED') THEN 1 ELSE 0 END FLAG_APPROVED_OR_REJECTED
  FROM AP_UWI.ONL_UW_DAILY_DATA
  WHERE TIME_DECISION_DATE BETWEEN TRUNC(SYSDATE-1,'MM') AND TRUNC(SYSDATE-1)
    AND DECISION_OVERALL IN ('APPROVED','REJECTED')
),
BASE1 AS
(
  SELECT
    UTM_SOURCE, TIME_DECISION_MONTH,
    SUM(FLAG_APPROVED) APPROVED,
    SUM(FLAG_REJECTED) REJECTED,
    SUM(FLAG_APPROVED_OR_REJECTED) APPROVED_AND_REJECTED

  FROM BASE
  GROUP BY UTM_SOURCE, TIME_DECISION_MONTH
)
SELECT 
  UTM_SOURCE
 ,TIME_DECISION_MONTH
 ,APPROVED
 ,(APPROVED*100/SUM(APPROVED) OVER()) "APPROVED%"
 ,REJECTED
 ,(REJECTED*100/SUM(REJECTED) OVER()) "REJECTED%"
 ,APPROVED_AND_REJECTED
 ,(APPROVED_AND_REJECTED*100/SUM(APPROVED_AND_REJECTED) OVER()) "APPROVED_AND_REJECTED%"
FROM BASE1
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...