2012-08-03 7 views
0

2 열로 SQL에 두 개의 SELECT의 가입과 내가 같은 테이블에 둘 다 보여주고 싶은 :내가 데이터를 얻을 수있는 두 가지 질문이

select aaa.Text, count(*) 
    from XXXXX main inner join XXXXXX 
on XXXXX 
where status = A 
group XXXXX 
order by aaa.Text 

    Text1 111111 
    Text2 222222 
    Text3 333333 

select aaa.Text, count(*) 
    from XXXXX main inner join XXXXXX 
on XXXXX 
where status = B 
group XXXXX 
order by aaa.Text 

    Text1 444444 
    Text2 555555 
    Text3 666666 

그리고 난 그냥 동일한의 데이터를 표시 할 두 개의 열

Text1 111111  444444  
    Text2 222222  555555 
    Text3 333333  666666 

내가 SQL에 새로운 오전과 내가, UNION, UNION ALL을 사용하여 사이에 분실 테이블은 INTO를 선택하고, 나는이 일을 매우 간단 확신합니다. 고맙습니다.

답변

0
select Text, a.cnt, b.cnt from 

(select Text, count(*) cnt 
from XXXXX main inner join XXXXXX 
on XXXXX 
where status = A 
group XXXXX) a 

JOIN 

(select Text, count(*) cnt 
from XXXXX main inner join XXXXXX 
on XXXXX 
where status = B 
group XXXXX) b 

USING Text 
ORDER xxxxx 

서로 옆에있는 을 넣어 테이블에 가입, 테이블을 조인하지 UNION이 필요합니다.

을 삽입하는 통합 테이블.

+0

a.Text = b.Text –

+0

@JoeGJoseph에 USING'는 '가 바람직하다. – Ariel

+0

고마운 아리엘 .. 나는 그걸 알지 못했다. –

2

당신은 그들을

SELECT a.text, a.count, b.count 
FROM 
( 
    select Text, count(*) 
    from XXXXX main inner join XXXXXX 
    on XXXXX 
    where status = A 
    group XXXXX 
    order XXXXX 
) a 
INNER JOIN 
( 
    select Text, count(*) 
    from XXXXX main inner join XXXXXX 
    on XXXXX 
    where status = B 
    group XXXXX 
    order XXXXX 
) b 
ON a.text=b.text 
1

이 작업을 수행하는 한 가지 방법은 개의 일련의 합계를 1과 일치시키는 것입니다. 예를 들어

:

select Text, 
    sum(case when status="A" then 1 else 0 end), 
    sum(case when status="B" then 1 else 0 end) 
from XXXXX main inner join XXXXXX 
on XXXXX 
group XXXXX 
order XXXXX 
+0

'status'에 인덱스가있는 경우 조인을 사용하면 *보다 * 빠릅니다 *. 색인이 없다면별로 중요하지 않습니다. – Ariel

+0

예 -이 방법은이 방법에 약간 간단하지만 조건이 더 복잡한 경우에 유용합니다. –

관련 문제