2014-12-18 13 views
-1

В приведенных ниже сценариях, уникальное сочетание deal_id и CUST_NUM может иметь различные CUST_IDs ..Сравнить столбцы в таблице

С ниже запросом можно вручную увидеть, что ..

SELECT DEAL_ID,CUST_NUM,CUST_ID, 
ROW_NUMBER() OVER(PARTITION BY DEAL_ID ORDER BY DEAL_ID) RID FROM TABLE_A; 

Сценарий 1 : с таким же CUST_ID

DEAL_ID CUST_NUM CUST_ID RID 
10002804 609793 0229  1 
10002804 609793 0229  2 
10002804 609793 0229  3 
10002804 609793 0229  4 
10002804 609793 0229  5 

Сценарий 2: с различными CUST_ID

DEAL_ID CUST_NUM CUST_ID RID 
10002804 609793  6221  1 
10002804 609793  0229  2 
10002804 609793  0229  3 
10002804 609793  6221  4 
10002804 609793  0229  5 

Я хочу сравнить значения столбца CUST_ID для комбинации DEAL_ID и CUST_NUM с помощью RID. как я могу это сделать?

Я хочу, чтобы увидеть результат набора посмотреть, как ..

DEAL_ID CUST_NUM CUST_ID RID COMPARE 
10002804 609793 0229  1 SAME 
10002804 609793 0229  2 SAME 
10002804 609793 0229  3 SAME 
10002804 609793 0229  4 SAME 
10002804 609793 0229  5 SAME 


DEAL_ID CUST_NUM CUST_ID RID COMPARE 
10002804 609793  6221  1 NOT SAME 
10002804 609793  0229  2 NOT SAME 
10002804 609793  0229  3 NOT SAME 
10002804 609793  6221  4 NOT SAME 
10002804 609793  0229  5 NOT SAME 
+0

Что вы на самом деле сравнивать? Какие качества делают результаты «одинаковыми» и «не одинаковыми»? В этом наборе результатов мне кажется, что RID 2, 3 и 5 должны быть эквивалентными. – DaaaahWhoosh

+0

Представьте, что вы «объедините все» эти строки в одну таблицу. Должны ли мы обрабатывать их как отдельные группы, или результат будет просто «НЕ ТАКОЙ»? –

+0

@DaaaahWhoosh - В принципе, если все CUST_ID одинаковы для DEAL_ID и CUST_NUM..Я хочу поставить результат сравнения как SAME..если НЕ НЕ ТАК ... – Spider

ответ

2

SQL Fiddle

Oracle 11g R2 Настройка схемы:

CREATE TABLE TAB 
    ("DEAL_ID" int, "CUST_NUM" int, "CUST_ID" int, "RID" int) 
; 

INSERT ALL 
    INTO TAB ("DEAL_ID", "CUST_NUM", "CUST_ID", "RID") 
     VALUES (10002804, 609793, 6221, 1) 
    INTO TAB ("DEAL_ID", "CUST_NUM", "CUST_ID", "RID") 
     VALUES (10002804, 609793, 0229, 2) 
    INTO TAB ("DEAL_ID", "CUST_NUM", "CUST_ID", "RID") 
     VALUES (10002804, 609793, 0229, 3) 
    INTO TAB ("DEAL_ID", "CUST_NUM", "CUST_ID", "RID") 
     VALUES (10002804, 609793, 6221, 4) 
    INTO TAB ("DEAL_ID", "CUST_NUM", "CUST_ID", "RID") 
     VALUES (10002804, 609793, 0229, 5) 
    INTO TAB ("DEAL_ID", "CUST_NUM", "CUST_ID", "RID") 
     VALUES (100028041, 609793, 0229, 1) 
    INTO TAB ("DEAL_ID", "CUST_NUM", "CUST_ID", "RID") 
     VALUES (100028041, 609793, 0229, 2) 
    INTO TAB ("DEAL_ID", "CUST_NUM", "CUST_ID", "RID") 
     VALUES (100028041, 609793, 0229, 3) 
    INTO TAB ("DEAL_ID", "CUST_NUM", "CUST_ID", "RID") 
     VALUES (100028041, 609793, 0229, 4) 
    INTO TAB ("DEAL_ID", "CUST_NUM", "CUST_ID", "RID") 
     VALUES (100028041, 609793, 0229, 5) 
SELECT * FROM dual 
; 

Запрос 1:

select deal_id, cust_num, cust_id, 
decode(
    count(distinct cust_id) 
    over (partition by deal_id, cust_num), 
    1, 'SAME', 
    'NOT SAME') same 
from tab 

Results:

| DEAL_ID | CUST_NUM | CUST_ID |  SAME | 
|-----------|----------|---------|----------| 
| 10002804 | 609793 |  229 | NOT SAME | 
| 10002804 | 609793 |  229 | NOT SAME | 
| 10002804 | 609793 |  229 | NOT SAME | 
| 10002804 | 609793 | 6221 | NOT SAME | 
| 10002804 | 609793 | 6221 | NOT SAME | 
| 100028041 | 609793 |  229 |  SAME | 
| 100028041 | 609793 |  229 |  SAME | 
| 100028041 | 609793 |  229 |  SAME | 
| 100028041 | 609793 |  229 |  SAME | 
| 100028041 | 609793 |  229 |  SAME | 
+0

wow..that's cool one .. :) спасибо – Spider

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