|  | Posted by Roy Harvey on 07/23/07 15:32 
--Query 1SELECT field1
 FROM Table1
 GROUP BY field1
 HAVING COUNT(distinct field2) = 2
 AND COUNT(distinct CASE WHEN field2 IN ('a', 'b')
 THEN field2
 END) = 2
 
 --Query 2
 SELECT field1
 FROM Table1
 WHERE field2 IN ('a', 'b')
 GROUP BY field1
 HAVING COUNT(distinct field2) = 2
 
 Roy Harvey
 Beacon Falls, CT
 
 On Mon, 23 Jul 2007 08:00:23 -0700, gelangov@hotmail.com wrote:
 
 >create table table1
 >(field1 varchar (8),
 >field2 varchar (4))
 >
 >field1 and field2 together is unique.
 >
 >Example data:
 >
 >Field1		Field2
 >1			A
 >1			B
 >1			C
 >2			A
 >2			C
 >3			A
 >3			B
 >3			D
 >4			A
 >4			B
 >
 >1. The query one should find all the Field1 that has Field2 value of
 >ONLY (A) and (B)
 >Here the result will be Field1, 4 (only one result)
 >
 >2. The query two should find all the Field1 that has Field2 value of
 >(A)and (B)
 >Here the result will be Field1,1,3 and 4 (three results)
 >
 >Right now, I am doing this way...Is there a more efficient way than
 >this?
 >
 >
 >-- Query one:
 >
 >
 >SELECT      <a.field1> from
 >
 >(SELECT     <field1>, <field2> FROM table1
 >
 >WHERE       <field2> ='A'
 >
 >UNION
 >
 >SELECT      <field1>, <field2> FROM table1
 >
 >WHERE       <field2> ='B'
 >
 >UNION
 >
 >SELECT      <field1>, <field2> FROM table1
 >
 >WHERE       <field2> ='C') a
 >
 >WHERE       <a.field1> not in (SELECT <field1>
 >
 >FROM        table1 WHERE <field2> not in ('a', 'b', 'c'))
 >
 >GROUP by <a.field1>
 >
 >HAVING count(*) =3
 >
 >order by <a.field1>
 >
 >
 >--query 2
 >
 >SELECT  <a.field1> from
 >
 >(SELECT     <field1>, <field2> FROM table1
 >
 >WHERE       <field2> ='a'
 >
 >UNION
 >
 >SELECT      <field1>, <field2> FROM table1
 >
 >WHERE       <field2> ='b'
 >
 >UNION
 >
 >SELECT      <field1>, <field2> FROM table1
 >
 >WHERE       <field2> ='c'
 >
 >)a
 >
 >GROUP by <a.field1>
 >
 >HAVING count(*) =3
 >
 >order by <a.field1>
 >
 >
 >
 >Thank you so much !!!
  Navigation: [Reply to this message] |