选择ColA = ColB的行,并添加一个新列,告知ColA中的原始数据是否重复

She*_*eif 3 sql oracle group-by case having

我试图找出如何查询表(该表实际上是一个结果集,因此它将是一个子查询),将其分组ColA=ColB(见下文),并一步创建一个计算字段.

所以,如果我的测试数据看起来像

ColA    ColB    ColC 
1       1       aaa 
1       2       bbbb    
1       3       cccc    
2       2       dddd    
3       3       eeee    
3       4       ffff    
3       5       gggg    
3       6       hhhh    
4       4       iiii    
5       5       jjjj    
6       6       kkkk    
6       7       llll    
6       8       mmmm    

我想只检索行,ColA=ColB并添加一个新列,告诉我原始数据是否ColA重复.见下文.

ColA   ColB    ColC    multiples
1      1       aaaa    yes
2       2       dddd    no
3       3       eeee    yes
4       4       iiii    no
5       5       jjjj    no
6       6       kkkk    yes

有人可以帮我解决语法问题吗?我一直在玩Group By和SubSelect无济于事.我是否需要对多个字段使用case语句?

Raj*_*thi 7

发布create table和insert语句而不是Desc表更有帮助,并从table_name中选择*; http://tkyte.blogspot.com/2005/06/how-to-ask-questions.html

create table test_repeat(
   cola number,
   colb number,
   colc varchar2(20)
   );

insert into test_repeat values (1,1,'aaa'); 
insert into test_repeat values (1,2,'bbbb');    
insert into test_repeat values (1,3,'cccc');    
insert into test_repeat values (2,2,'dddd');    
insert into test_repeat values (3,3,'eeee'); 
insert into test_repeat values (3,4,'ffff');    
insert into test_repeat values (3,5,'gggg');    
insert into test_repeat values (3,6,'hhhh');    
insert into test_repeat values (4,4,'iiii');    
insert into test_repeat values (5,5,'jjjj');    
insert into test_repeat values (6,6,'kkkk');    
insert into test_repeat values (6,7,'llll');    
insert into test_repeat values (6,8,'mmmm');
commit;
Run Code Online (Sandbox Code Playgroud)

1.您可以使用Oracle分析函数Lead 查看结果集,以查看colA是否与下一行相同(在订购之后..),如...

select * from
(select colA, colb,
       (case when colA = (lead(cola) over 
                          (partition by colA order by cola, colb))
            then 'Yes'
            else 'No'
       end) multiples,
       colc
  from test_repeat)
  where colA = colb
/

      COLA       COLB MUL COLC
---------- ---------- --- --------------------
         1          1 Yes aaa
         2          2 No  dddd
         3          3 Yes eeee
         4          4 No  iiii
         5          5 No  jjjj
         6          6 Yes kkkk
Run Code Online (Sandbox Code Playgroud)

2.或者你可以得到COLA每个值的计数并比较它以查看是否有重复...

select a.colA, a.colb, a.colc,
       (case when (select count(*) from test_repeat t where t.cola = a.colA) > 1
            then 'Yes'
            else 'No'
       end) Repeat
  from test_repeat a
  where colA = colB
/

      COLA       COLB COLC                 REP
---------- ---------- -------------------- ---
         1          1 aaa                  Yes
         2          2 dddd                 No
         3          3 eeee                 Yes
         4          4 iiii                 No
         5          5 jjjj                 No
         6          6 kkkk                 Yes
Run Code Online (Sandbox Code Playgroud)

它们都同样简单,但我建议采用分析函数方法,因为我发现它对于我过去使用过的所有查询通常都更快.