2012-08-03 3 views
0

J'ai deux requêtes pour obtenir des données et je veux montrer tous les deux dans la même table:inscription de deux SELECT SQL dans deux colonnes

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 

Et je veux juste montrer les données de la même table avec deux colonnes

Text1 111111  444444  
    Text2 222222  555555 
    Text3 333333  666666 

Je suis nouveau à SQL et je suis perdu entre l'utilisation, UNION, UNION ALL, SELECT INTO, et je suis sûr qu'il est très simple de le faire. Merci beaucoup.

Répondre

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 

Rejoignez table pour mettre les colonnes à côté de l'autre.

Les tables de l'union doivent mettre les lignes l'une après l'autre.

+0

sur a.Text = b.Text –

+0

@JoeGJoseph 'using' est préféré. – Ariel

+0

Merci Ariel .. Je ne savais pas que –

2

Vous devez joindre les tables, pas UNION les

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

Une façon de faire est d'utiliser sum total une série de 1 où les critères correspondent.

Par exemple:

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

S'il existe un index sur 'status', l'utilisation d'une jointure sera * beaucoup * plus rapide que cela. S'il n'y a pas d'index, cela n'a pas beaucoup d'importance. – Ariel

+0

Oui - cette situation est un peu simple pour cette méthode, mais elle est utile lorsque les conditions sont plus complexes. –

Questions connexes