dbTalk Databases Forums  

Same field different values

comp.databases.ms-sqlserver comp.databases.ms-sqlserver


Discuss Same field different values in the comp.databases.ms-sqlserver forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
gelangov@hotmail.com
 
Posts: n/a

Default Same field different values - 07-23-2007 , 10:00 AM






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 !!!


Reply With Quote
  #2  
Old   
markc600@hotmail.com
 
Posts: n/a

Default Re: Same field different values - 07-23-2007 , 10:14 AM






-- Query 1
select Field1
from table1
group by Field1
having sum(case when Field2 not in ('A','B') then 1 else 0 end)=0

-- Query 2
select Field1
from table1
group by Field1
having sum(case when Field2='A' then 1 else 0 end)>0
and sum(case when Field2='B' then 1 else 0 end)>0


Reply With Quote
  #3  
Old   
Roy Harvey
 
Posts: n/a

Default Re: Same field different values - 07-23-2007 , 10:32 AM



--Query 1
SELECT 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 (AT) hotmail (DOT) com wrote:

Quote:
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 !!!

Reply With Quote
  #4  
Old   
gelangov@hotmail.com
 
Posts: n/a

Default Re: Same field different values - 07-23-2007 , 12:33 PM



On Jul 23, 11:32 am, Roy Harvey <roy_har... (AT) snet (DOT) net> wrote:
Quote:
--Query 1
SELECT 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, gelan... (AT) hotmail (DOT) 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 !!!- Hide quoted text -

- Show quoted text -
Thank you!!!



Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.