2012-05-30 84 views
0

我有兩個名爲Production和Chart的表,如下所示。在sql查詢中添加計數列

生產

Name Layer 
CDV TSK 
CDV USV 
M1 OSK 

Name 
L1_CDV_TSK 
L1_CDV_TSK 
L1_M1_OSK 

我不得不產生這樣的輸出:

Name Layer Count 
CDV TSK 2 
CDV USV 0 
M1 OSK 1 

// bse L1_CDV_TKK and L1_M1_OSK are in the Charttable. 

我怎麼會寫一個SQL查詢來實現這一目標?

這是我的嘗試,但不能看到Prodution

Select 
    p.Name, p.layer, Count(*) as test 
from 
    Production p, Chart c 
where 
    c.chartname like '%'+ p.name+'_'+p.layer + '%' 
group by 
    p.Name, p.layer 

請告知每一行。非常感謝!

回答

5
Select p.Name,p.layer,Count(c.chartname) as test 
from Production p 
left join Chart c on c.chartname like '%'+ p.name+'_'+p.layer + '%' 
group by p.Name,p.layer 

編輯:

認爲你在 「圖表」 列表中有一個錯字,或者我不明白你想要的結果...(TSK,TKK)

+0

非常感謝你的幫助 – TNA

+0

SRY,它SHD是TSK – TNA

1

試試這個:

Select p.Name,p.layer,Count(*) as test 
from Production p 
left join Chart c on c.chartname like '%'+ p.name+'_'+p.layer + '%' 
group by p.Name,p.layer 
0

首先,你需要學習新的聯接語法:

Select p.Name, p.layer,Count(*) as test 
from Production p join 
    Chart c 
    on c.chartname like '%'+ p.name+'_'+p.layer + '%' 
group by p.Name, p.layer 

其次,您正在篩選出計數爲零的那個。

爲了得到你想要的東西,嘗試:

Select p.Name, p.layer, 
     sum(case when c.chartname like '%'+ p.name+'_'+p.layer + '%' then 1 else 0 end) as test 
from Production p cross join 
    Chart c 
group by p.Name, p.layer 
+0

感謝,我用計數(c.ChartName),並且還在努力 – TNA