2016-03-25 3 views
0

私は以下の質問をしていますが、実行していますが、私が望むものを生産していません。オラクル - 数式付きのケース・ステートメントの使用

問合せ:

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

Oracleのセットアップ

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の両方を持っている場合、それはありませんあなたの質問の結果。 group by id節を使ってid = 1の2行を取得することはできません。どうか明らかにしてください。

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 
関連する問題