【问题标题】:Partition Function Count() over分区函数 Count() 结束
【发布时间】:2017-05-26 07:51:31
【问题描述】:

我正在尝试编写以下内容以获得 WO_Count 的运行总数,如下所示: 我必须保持像 WO_Count > 1 这样的条件。有人可以帮我吗?如果我保持 WO_Count > 1 的位置,则会出现以下错误:

ORA-00904:“WO_COUNT”:标识符无效 00904. 00000 - "%s: 无效标识符"

select 
   Test1.id_number as Case_ID,
   count(*) over ( partition by Tes2.NAME ) as WO_Count
FROM Test1
INNER JOIN Test2 ON Test1.Test12Test2=Test2.ID  

【问题讨论】:

    标签: sql oracle count partition


    【解决方案1】:

    您需要使用派生表或公用表表达式嵌套查询:

    select *
    from 
     (
        select 
           Test1.id_number as Case_ID,
           count(*) over ( partition by Tes2.NAME ) as WO_Count
        FROM Test1
        INNER JOIN Test2 ON Test1.Test12Test2=Test2.ID  
     ) dt
    WHERE WO_Count > 1
    

    顺便说一句,您的计数不会返回运行总数,而是组计数

    【讨论】:

      【解决方案2】:

      要获得运行计数,您可以使用ROW_NUMBER() 分析函数:

      SELECT t1.id_number as Case_ID,
             ROW_NUMBER() OVER (
               PARTITION BY t2.NAME
               ORDER BY     ROWNUM  /* or a column name */
             ) as WO_Count
      FROM   Test1 t1
             INNER JOIN Test2 t2
             ON ( t1.Test12Test2 = t2.ID )
      

      (注意:您也可以使用COUNT(*) OVER ( PARTITION BY ... ORDER BY ... ) 来获取运行计数,但是当您计算行数时,使用*,它们是等效的。)

      如果你想要第一行之后的所有行,那么:

      SELECT *
      FROM   (
        SELECT t1.id_number as Case_ID,
               ROW_NUMBER() OVER (
                 PARTITION BY t2.NAME
                 ORDER BY     ROWNUM  /* or a column name */
               ) as WO_Count
        FROM   Test1 t1
               INNER JOIN Test2 t2
               ON ( t1.Test12Test2 = t2.ID )
      )
      WHERE  WO_Count > 1
      

      【讨论】:

        猜你喜欢
        • 2012-06-27
        • 2015-10-18
        • 2013-05-16
        • 2014-01-18
        • 1970-01-01
        • 1970-01-01
        • 2010-09-15
        • 2022-11-12
        • 1970-01-01
        相关资源
        最近更新 更多