2013-05-02 88 views
0

我要創建一個列兩個表之間的連接,並顯示在它們所連接如何具有計數連接查詢

例如這裏「業務」字段的計數是我的鑰匙我想加入。

第一個查詢是

select 
    [business], count(*) as total from dimhexpand group by [business] 

,我得到的結果爲:

DA 54100 

Dual 6909 

ECM 1508 

Flex 15481 

另一個查詢:

select business, count (*) from LODG 
group by business order by business 

查詢的結果是:

DA 100 

Dual 909 

ECM 508 

Flex 15481 

我想通過連接這兩個表顯示類似

**dimhexpand.business dimhexpand.count LODG.Count** 
DA   54100  100 

Dual   6909  909 

ECM   1508  508 

Flex   15481  151481 

回答

0

,您可以加入在business列的兩個表,返回的數據:

select d.business, 
    count(d.business) as dimCount, 
    l.lodgCount 
from dimhexpand d 
left join 
(
    select business, count (*) lodgCount 
    from LODG 
    group by business 
) l 
    on d.business = l.business 
group by d.business; 

如果你可能有不同的business值在每個表中,您可以在兩個查詢之間使用一個FULL OUTER JOIN,與以下類似:

select coalesce(d.business, l.business), 
    coalesce(d.dimCount, 0) dimCount, 
    coalesce(l.lodgCount, 0) lodgCount 
from 
(
    select business, count(*) as dimCount 
    from dimhexpand 
    group by business 
) d 
full outer join 
(
    select business, count (*) lodgCount 
    from LODG 
    group by business 
) l 
    on d.business = l.business 
+0

謝謝它的工作原理。但是當我們處理3個表格時,我們可以有同樣的事情,我正在嘗試,但在加入另一個具有相同結構的表格時卡住了。 – 2013-05-03 07:23:45

+0

@BhaskarMishra如果你還有其他問題,那麼我建議發佈一個新的問題與這些細節。 :)然後你會得到一雙新的眼睛來幫助你。 – Taryn 2013-05-03 12:16:43

0

有些問題需要回答才能提供準確的答案。你能在dimhexpand而不是在LODG中做生意嗎?反之亦然? 上面提供的子查詢答案將適用於您將始終有一對一的業務。如果沒有,如果沒有完全連接,你將失去任何一個表的值。 如果您可以擁有對任一表唯一的業務,您可以使用內存表嗎?

Declare @tblDimhExpand TABLE (
    business varchar(50) null, 
    CountDimHExpand int null 
    ) 
Declare @tblLoDG TABLE (
    business varchar(50) null, 
    CountLodG int null 
    ) 

Insert into @tblDimhExpand select business, count(*) from DimhExpand Group By Business 

Insert into @tblLoDG select business, count(*) from LODG Group By Business 

Select coalesce(dim.business, lodg.business) as Business, dim.countDimhExpand, lodg.countlodg 
    From @tblDimhExpand dim 
    FULL JOIN @tblLodG lodg on dim.Business = lodg.Business 

這將返回兩個表中的所有業務記錄,而不管他們是否存在於另一個表,並將連接的結果出現在兩個時候,給NULL爲表當它們存在時缺少值只有一個。

+0

太棒了,這個工程。非常感謝。現在我需要弄清楚哪個查詢需要更多時間:-)。 – 2013-05-03 06:57:49