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

PL/SQL:需要帮助根据条件创建计算列。在选择查询中完成

  •  1
  • Amit Singh Parihar  · 技术社区  · 8 年前

    我试图根据条件计算所有不同的ID。但我无法找出语法哪里出了问题。逻辑是

    COUNTD(IF ([column_name1] = 1) THEN [DATAPAGEID] END)
    

    Select FT.NAME, COUNT(DISTINCT FT.pageID IF FT."column_name" = 1 )  
    as total_expected
    FROM 
    ( Sub Query) FT
    Group by FT.Name 
    Order by FT.Name
    

            Select FT.SITENAME, COUNT(DISTINCT DATAPAGEID) as Datapage
           from 
              (sub query)
           WHERE FT."column_name" = 1
    

    但问题是,我在查询中有其他计算列,它们都需要是同一行的一部分。下面是表格的样子

           name      Calculated_Column1   Calculated_Column2   Calculated_column3
          abc        781                  811                    96.54%
          pqr        600                  800                    75.00%
    

    其中computed_column3是781/811的结果。因此,我无法对每一列进行新的查询。我认为在计算列时使用if条件可以解决这个问题,但不知何故,我无法正确使用语法。

    因此,我需要知道如何在select查询中创建条件计算列。如果我没有解释清楚,请让我知道,我会尝试进一步澄清。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Kaushik Nayak    8 年前

    count (DISTINCT ) 如图所示。

    SELECT FT.NAME,
      COUNT(DISTINCT
      CASE
        WHEN DATAPAGEID = 1
        THEN 1
        ELSE 0
      END ) Calculated_Column1,
      COUNT(DISTINCT
      CASE
        WHEN DATAPAGEID = 2
        THEN 1
        ELSE 0
      END ) Calculated_Column2,
      ( COUNT(DISTINCT
      CASE
        WHEN DATAPAGEID = 1
        THEN 1
        ELSE 0
      END ) / COUNT(DISTINCT
      CASE
        WHEN DATAPAGEID = 2
        THEN 1
        ELSE 0
      END ) ) * 100||'%' Calculated_Column3
    FROM
      ( SELECT 'abc' name, 1 DATAPAGEID FROM dual
      UNION ALL
      SELECT 'abc' name, 1 DATAPAGEID FROM dual
      UNION ALL
      SELECT 'pqr' name, 2 DATAPAGEID FROM dual
      UNION ALL
      SELECT 'pqr' name, 2 DATAPAGEID FROM dual
      UNION ALL
      SELECT 'pqr' name, 3 DATAPAGEID FROM dual
      ) FT
    GROUP BY FT.Name
    ORDER BY FT.Name;
    

    abc 1   1   100%
    pqr 1   2   50%