2016-03-25 145 views
0

我有下面的一條查詢,它運行但沒有產生我想要的東西。Oracle - 使用案例聲明與計數

查詢:

select id 
,CASE WHEN COUNT(id) > 1 THEN 'X' 
ELSE ' ' END AS Dual 
from x 
group by id 

結果:

ID Dual 
1  
1 

我想看看:

ID  Dual 
1   x 
1   x 
+0

這就是您的整個查詢?如果按ID分組,您爲什麼希望看到ID = 1的多行? – ruudvan

回答

1

甲骨文設置

CREATE TABLE x (id INT); 
INSERT INTO X VALUES (1); 
INSERT INTO X VALUES (1); 
INSERT INTO X VALUES (2); 

查詢

SELECT id, 
     CASE WHEN COUNT(1) OVER (PARTITION BY id) > 1 
      THEN 'X' 
      ELSE ' ' 
      END AS Dual 
FROM x; 

輸出

 ID DUAL 
---------- ---- 
     1 X  
     1 X 
     2  
1

如果你的表X中有兩行,都與ID = 1,你似乎暗示,那麼這是不是查詢結果。使用id by group子句不會得到id = 1的兩行。請澄清。

SQL> create table x (id) as select 1 from dual union all select 1 from dual; 
Table created. 
Elapsed: 00:00:00.01 

SQL> select * from x; 
     ID 
---------- 
     1 
     1 
2 rows selected. 
Elapsed: 00:00:00.08 

SQL> select id 
    2 ,CASE WHEN COUNT(id) > 1 THEN 'X' 
    3 ELSE ' ' END AS Dual 
    4 from x 
    5 group by id 
    6/

     ID DUAL 
---------- ---- 
     1 X 
1 row selected. 
Elapsed: 00:00:00.13