代码之家  ›  专栏  ›  技术社区  ›  Amit Singh Parihar

PL/SQL:需要在select查询中创建条件计算列

  •  0
  • Amit Singh Parihar  · 技术社区  · 7 年前

    我试图在select查询中创建条件计算列。逻辑如下所示

       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查询中表达这一点。非常感谢您的帮助。

    1 回复  |  直到 7 年前
        1
  •  1
  •   krokodilko    7 年前

    此语法错误:

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

    使用 CASE Expression 相反:

      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