2017-05-26 1 views
0

J'essaie d'écrire ce qui suit afin d'obtenir un total cumulé de WO_Count, comme ceci: Je dois garder la condition comme WO_Count> 1. Est-ce que quelqu'un pourrait m'aider s'il vous plait? Si je garde où WO_Count> 1, je deviens ci-dessous erreur:Partition Fonction Count() sur

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 

Répondre

1

Vous devez nicher votre requête, soit à l'aide d'une table dérivée ou une expression de table commune:

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 

Btw, votre nombre ne renvoie pas un total cumulé, mais un groupe compte.

+0

Merci ! ça marche :) :) – Shilpi

0

Pour obtenir un compte courant, vous pouvez utiliser la fonction analytique 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) 

(Remarque: vous pouvez également utiliser COUNT(*) OVER (PARTITION BY ... ORDER BY ...) pour obtenir un compte courant mais quand vous comptez les lignes, en utilisant *, ils sont équivalent)

Si vous voulez que toutes les lignes après la première puis:.

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