Sql 比较表中的列

Sql 比较表中的列,sql,oracle,Sql,Oracle,在下面的场景中,DEAL_ID和CUST_NUM的唯一组合可以具有不同的CUST_ID 通过下面的查询,我可以手动看到 SELECT DEAL_ID,CUST_NUM,CUST_ID, ROW_NUMBER() OVER(PARTITION BY DEAL_ID ORDER BY DEAL_ID) RID FROM TABLE_A; 场景1:使用相同的客户ID DEAL_ID CUST_NUM CUST_ID RID 10002804 609793 0229

在下面的场景中,DEAL_ID和CUST_NUM的唯一组合可以具有不同的CUST_ID

通过下面的查询,我可以手动看到

SELECT DEAL_ID,CUST_NUM,CUST_ID,
ROW_NUMBER() OVER(PARTITION BY DEAL_ID ORDER BY DEAL_ID) RID FROM TABLE_A;
场景1:使用相同的客户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:使用不同的客户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
我想在RID的帮助下比较DEAL_ID和CUST_NUM组合的CUST_ID列值。 我该怎么做

我想看到结果集看起来像

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 

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
;
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
|   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 |
查询1

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
;
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
|   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 |

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
;
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
|   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 |

你到底在比较什么?什么品质使结果“相同”和“不相同”?在这个结果集中,在我看来RID2、3和5应该是等价的。我们是否必须将它们作为单独的组进行处理,或者结果只是“不一样”?@DaaaahWhoosh-基本上,如果所有客户ID对于交易ID和客户编号都相同..我想将比较结果放在相同的位置..如果不一样。。