2014-11-15 6 views
0

У меня есть таблица, которая выглядит следующим образом.идентификация повторяющихся наборов строк

create table Testing( 
    inv_num varchar2(100), 
    po_num varchar2(100), 
    line_num varchar2(100) 
    ) 

данные со следующим.

Insert into Testing (INV_NUM,PO_num,line_num) values ('19782594','P0254836',1); 
Insert into Testing (INV_NUM,PO_num,line_num) values ('19782594','P0254836',1); 
Insert into Testing (INV_NUM,PO_num,line_num) values ('19968276','P0254836',1); 
Insert into Testing (INV_NUM,PO_num,line_num) values ('19968276','P0254836',1); 

то, что я пытаюсь сделать, это определить несколько элементов в пределах таблицы с тем же PO_num, но разными inv_num.

У меня попробовать этот

SELECT  
      T1.inv_num, 
      T1.Po_num, 
      T1.LINE_num , 
      count(*) over(partition by 
      T1.inv_num)myRecords 
     FROM testing T1 
     where T1.Po_num = 'P0254836' 
     group by 
      T1.inv_num, 
      T1.Po_num, 
      T1.LINE_num 
      order by t1.inv_num 

, но это те, которые не дают мне желаемого конечного результата.

Я хотел бы завершить следующее.

INV_NUM PO_NUM  LINE_NUM  Myrecords 
19782594 P0254836 1  1 
19782594 P0254836 1  1 
19968276 P0254836 1  2 
19968276 P0254836 1  2 

Где я ошибаюсь? Мне очень нравится идентифицировать изменение INV_NUM для этого поля.

Обратите внимание, что это часть гораздо более крупного проекта, и я выбрал только небольшое подмножество, чтобы показать здесь.

ответ

1

Обновлено:

SELECT 
    inv_num 
    , po_num 
    , line_num 
    , DENSE_RANK() OVER (ORDER BY inv_num) "MyRecords" 
FROM (
    SELECT 
     po_num 
     , inv_num 
     , line_num 
     , COUNT(line_num) OVER (PARTITION BY po_num, inv_num ORDER BY NULL) cnt 
    FROM testing 
) 
WHERE cnt > 1; 

возвращается

| INV_NUM | PO_NUM | LINE_NUM | MYRECORDS | 
|----------|----------|----------|-----------| 
| 19782594 | P0254836 |  1 |   1 | 
| 19782594 | P0254836 |  1 |   1 | 
| 19968276 | P0254836 |  1 |   2 | 
| 19968276 | P0254836 |  1 |   2 | 

SQL Fiddle

+0

Это дает мне 2 и 2 для подсчета голосов. Я хотел бы идентифицировать первый набор как установленный 1, а второй набор, как установлено, 2. для моего конечного результата. – Miguel

+0

мои учетные записи. – Miguel

+0

И вы хотите дублировать строки? – Abecee

1

Может быть, это поможет:

SELECT inv_num, 
     po_num, 
     line_num, 
     DENSE_RANK() OVER (ORDER BY inv_num) AS rn 
    FROM testing 
+0

это довольно близко, но для подсчета множеств необходимо включить Po_num. Поэтому, если я включаю значения «Вставить в тестирование» (INV_NUM, PO_num, line_num) («19968279», «P0254837», 1), «это не получится. – Miguel

+0

Что вы ожидаете от рекламы «Myrecords» для этой новой строки? – DirkNM

Смежные вопросы