两列

问题描述:

我有两个查询来获得数据加入两个SELECT在SQL的,我想在同一个表,以显示他们两个:两列

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之间丢失表,SELECT INTO,我相信这是非常简单的做到这一点。非常感谢你。

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 

加入表把彼此相邻。

联合表格将彼此相连。

+0

上a.Text = b.Text – 2012-08-03 08:59:17

+0

@JoeGJoseph'USING'是优选的。 – Ariel 2012-08-03 08:59:31

+0

谢谢Ariel ..我不知道 – 2012-08-03 09:05:03

你需要加入的表,而不是UNION他们

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 

执行此操作的一种方法是使用sum共计一系列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 2012-08-03 09:02:15

+0

是的 - 这种情况对于这种方法来说有点简单,但是在条件更复杂的情况下它很有用。 – 2012-08-03 09:03:18