Home » SQL & PL/SQL » SQL & PL/SQL » Ids of unique error type (Oracle 11.2.0.3)
Ids of unique error type [message #650200] Tue, 19 April 2016 06:54 Go to next message
pointers
Messages: 451
Registered: May 2008
Senior Member
Hi,

CREATE TABLE err_log (id NUMBER, err_typ VARCHAR2(2))
/

BEGIN
INSERT INTO err_log values (1, 'E');
--
INSERT INTO err_log values (2, 'E');
INSERT INTO err_log values (2, 'F');
INSERT INTO err_log values (2, 'E');
INSERT INTO err_log values (2, 'F');
--
INSERT INTO err_log values (3, 'E');
INSERT INTO err_log values (3, 'F');
--
INSERT INTO err_log values (4, 'E');
INSERT INTO err_log values (4, 'E');
--
INSERT INTO err_log values (5, 'F');
INSERT INTO err_log values (5, 'F');
--
INSERT INTO err_log values (6, 'E');
END;
/


I would like to get all the IDs along with err_typ where Ids having only err_typ=E but not F
From the above data, IDs 1,4 and 6 are having err_typ=E.

Output: 
ID	ERR_TYP

1	E
4	E
4	E
6	E


I wrote the following query, could you please show better ways of doing it. I am accessing err_log twice here.
SELECT   b.ID, b.err_typ
    FROM (SELECT   ID, COUNT (DISTINCT err_typ) cnt
              FROM err_log
          GROUP BY ID
            HAVING COUNT (DISTINCT err_typ) = 1) a,
         err_log b
   WHERE a.ID = b.ID AND b.err_typ = 'E'
ORDER BY 1


Thank you in advance.

Regards,
Pointers
Re: Ids of unique error type [message #650202 is a reply to message #650200] Tue, 19 April 2016 07:31 Go to previous messageGo to next message
Michel Cadot
Messages: 68641
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator
SQL> select id, err_typ
  2  from (select id, err_typ, max(err_typ) over (partition by id) max_err
  3        from err_log)
  4  where max_err = 'E'
  5  /
        ID ER
---------- --
         1 E
         4 E
         4 E
         6 E

Re: Ids of unique error type [message #650203 is a reply to message #650202] Tue, 19 April 2016 08:00 Go to previous messageGo to next message
cookiemonster
Messages: 13920
Registered: September 2008
Location: Rainy Manchester
Senior Member
Are the possible values for err_typ just E and F or can you have other values?
Re: Ids of unique error type [message #650206 is a reply to message #650203] Tue, 19 April 2016 08:49 Go to previous messageGo to next message
pointers
Messages: 451
Registered: May 2008
Senior Member
Thank you Micheal that was brilliant.

@Cookiemonster: Yes, we do have only F and E are the possible values.

Regards,
Pointers
Re: Ids of unique error type [message #650214 is a reply to message #650206] Tue, 19 April 2016 12:58 Go to previous messageGo to next message
Bill B
Messages: 1971
Registered: December 2004
Senior Member
You can also do the following

select a.id,a.err_type
from err_log a
where a.err_type = 'E'
and not exists
(select null
 from err_log b
 where b.id = a.id
 and  b.err_type = 'F');


or

Re: Ids of unique error type [message #650215 is a reply to message #650214] Tue, 19 April 2016 13:02 Go to previous messageGo to next message
Michel Cadot
Messages: 68641
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator

... outer join:
select a.id, a.err_typ
from err_log a left outer join err_log b
     on b.id = a.id and b.err_typ = 'F'
where a.err_typ = 'E' and b.id is null
/

Re: Ids of unique error type [message #650216 is a reply to message #650215] Tue, 19 April 2016 13:05 Go to previous messageGo to next message
Bill B
Messages: 1971
Registered: December 2004
Senior Member
Sweet. I love how there are 20 ways do to the same query in oracle. LOL
Re: Ids of unique error type [message #650228 is a reply to message #650216] Wed, 20 April 2016 07:11 Go to previous message
pointers
Messages: 451
Registered: May 2008
Senior Member
Very nice.

Thank you for showing different ways of doing it.

Regards,
Pointers
Previous Topic: need to modify the column datatype from varchar to number
Next Topic: Group By clause in inline view
Goto Forum:
  


Current Time: Thu Apr 18 20:31:04 CDT 2024