2012-05-30 83 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