2014-10-08 2 views
1

다음 표의 where 절을 사용하여 일부 데이터를 선택하려고합니다.SQL Server R2 : where 절을 사용하는 select 문

는 :

insert into test values(1,'Active'); 
insert into test values(1,'DeActive'); 
insert into test values(2,'Active'); 
insert into test values(2,'DeActive'); 
insert into test values(3,'Active'); 
insert into test values(3,'Active'); 
insert into test values(4,'Active'); 
insert into test values(5,'DeActive'); 

가 지금은 pid있는 프로세스 ID가 Active하고 모두 프로세스 이름을 가지고 테스트에서 데이터를 표시 할 :

create table test 
(
    pid int, 
    pname varchar(10) 
) 

일부 데이터를 삽입 DeActive.

예상 결과 :

pid 
---- 
1 
2 

참고 : pid 1 및 2는 모두 프로세스 이름 및 ActiveDeActive이다 pname 발생하는 상기 프로세스 ID.

답변

4

당신은 아래의 쿼리 확인, 일반적인 PID 값을 얻기 위해 교차을 사용할 수 있습니다 : 하드 코딩 된 값없이

Select Distinct pid From Test Where 
pname ='Active' 
Intersect 
Select Distinct pid From Test Where 
pname = 'DeActive' 
+0

정말 고마워요. – Meem

0
select a.pid 
from test a 
join test d on a.pid = d.pid and d.pname = 'DeActive' 
where a.pname = 'Active' 
+1

모호한 열 이름 'pid'에 대해 오류가 표시됩니다. –

+0

b가 될 수도 있지만 a.를 추가했습니다. 게다가. –

0

이것은 및 수를 편집 할 수있는 '1'미래 pnames

에 대한
select distinct pid from (select pid,count(distinct pname) as cnt 
from test 
group by pid) tab 
where cnt>1 
0
SELECT 
    a.pid 
FROM 
    dbo.test a 
join 
    dbo.test b on a.pid = b.pid 
    and a.pname = 'Active' and b.pname = 'DeActive' 
+0

몇 가지 설명을 추가하십시오! –

+0

테이블 테스트에서 자체 조인을 사용하면 그렇지 않은 경우 두 테이블을 얻을 수 있습니다. 하나의 테이블 T1에 (pid, 'activate), 두 번째 테이블 T2에 (pid,'deactivate ')가 있으면이 방법으로 생각하면됩니다. 그렇다면 거의 모든 사람들이 T1 JOIN T2 ON을 pid의 술어로 사용합니다. 위 쿼리에서 별칭 'a'와 별칭 'b'는이 동일한 관계를 나타냅니다. – sqlwithpanks

1
select distinct a.pid 
    from test a 
    join test b on a.pname=b.pname 
    where a.pname not in('Deactive') and a.pid < 3 
0

방법에 대한 이 ...

Select Pid from 
(
select pid , Count (distinct pname) as Pnamecount from test as a 
group by pid 
having COUNT(*) > 1 
) as temp 
Where temp.Pnamecount != 1