2016-03-25 18 views
0

Ich habe die unten stehende Abfrage und es läuft, aber nicht das, was ich will.Oracle - Verwenden einer Case-Anweisung mit Count

Abfrage:

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

Ergebnisse:

ID Dual 
1  
1 

Ich mag würde, um zu sehen:

ID  Dual 
1   x 
1   x 
+0

Ist das Ihre gesamte Abfrage? Warum erwarten Sie mehrere Zeilen mit ID = 1, wenn Sie nach ID gruppieren? – ruudvan

Antwort

1

Oracle-Setup:

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

Abfrage:

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

Ausgang:

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

Wenn Ihre Tabelle x zwei Reihen hat, die beide mit id = 1, wie Sie zu implizieren scheint, dann ist das nicht der Ergebnis Ihrer Anfrage. Sie würden nicht zwei Zeilen mit ID = 1 mit der Gruppe nach ID-Klausel erhalten. Bitte klären Sie.

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