2017-05-26 52 views
0

我试图写下以获得一个运行总数的WO_Count,如下所示: 我必须保持条件像WO_Count> 1。请问任何人可以帮我吗?如果我继续在那里WO_Count> 1,我收到以下错误:分区函数计数()通过

ORA-00904: "WO_COUNT": invalid identifier 00904. 00000 - "%s: invalid identifier"

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 

回答

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 

顺便说一句,你的计数不会返回运行总数,但组计数

+0

谢谢 !它的工作:) :) – Shilpi

0

为了得到一个运行计数可以使用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