PL/SQL: необходимо создать условные вычисляемые столбцы в запросе выбора

Я пытаюсь создать условные вычисляемые столбцы в моем запросе выбора. Логика приведена ниже

   Select  FT.NAME, 
    COUNT(DISTINCT PAGEID) as Total_Forms, 
    COUNT(DISTINCT PAGEID WHERE FT."Column1?" =1) as Expected_forms,
    COUNT(DISTINCT PAGEID WHERE FT."Column1?" =1 AND FT."FORM STATUS" in ('C','I') as Actual_forms,
    COUNT(DISTINCT DATAPAGEID WHERE FT."IS FORM EXPECTED1?" =1)/
    COUNT(DISTINCT DATAPAGEID WHERE FT."IS FORM EXPECTED1?" =1 AND FT."FORM STATUS" in ('C','I'))
     as Percentage
   FROM
       (Subquery) FT
   Group by FT.Name

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

  name      Total_forms   Expected_forms   Actual Forms  Percentage
  abc        943          811              781           96.54%
  pqr        900          800              600           75.00%

Однако я не могу сформулировать это в запросе PL/SQL. Буду признателен за любую оказанную помощь.


person Amit Singh Parihar    schedule 17.07.2017    source источник


Ответы (1)


Этот синтаксис неверен:

COUNT(DISTINCT PAGEID WHERE FT."Column1?" =1) as Expected_forms,

Вместо этого используйте выражение CASE:

  SELECT
    COUNT(DISTINCT PAGEID) as Total_Forms, 
    COUNT(DISTINCT CASE WHEN FT."Column1?" =1 THEN PAGEID END ) as Expected_forms,
    COUNT(DISTINCT CASE WHEN FT."Column1?" =1 AND FT."FORM STATUS" in ('C','I') 
                   THEN PAGEID END ) as Actual_forms,
    COUNT(DISTINCT CASE WHEN FT."IS FORM EXPECTED1?" =1 THEN DATAPAGEID  END)/
    COUNT(DISTINCT CASE WHEN FT."IS FORM EXPECTED1?" =1 AND FT."FORM STATUS" in ('C','I') 
                   THEN DATAPAGEID  END) as Percentage
   FROM
       (Subquery) FT
   Group by FT.Name
person krokodilko    schedule 17.07.2017