2009-10-21 82 views
0

我有两个表;潜在客户,领土和推荐人。我如何动态调整

铅的列:

ID, Name, TerritoryId

引荐具有:

ID, LeadId, Name

领土有:

ID and Name

的引线总是涉及领土和引线可任选地涉及一种引荐。

定期插入潜在顾客和推荐人记录(推荐人不太常见)。我想输出在GridView的报告看起来像这样:

 
Territory | Lead Count | Ref1 Lead Count | Ref2 Lead Count | Ref3 Lead Count 

Leeds  10   1    7     2 

Exeter  43    9    21    8 

etc... 

行,所以问题是,我想按地区和计数每领土引线....这是好的: -

select t.Name, COUNT(1) 
from Territory t inner join Lead l on l.TerritoryID = t.Id 
group by t.Name

但是现在我想通过引用来分解计数。

我明白我可以用PIVOT做到这一点,但是,我明白我必须在代码中明确指出Referrers。有什么方法可以执行某种动态数据透视表,它会根据Referrer中的行数添加额外的列吗?

我需要在SP内部使用动态SQL吗?

回答

0

是这样的:

select * from (select r.name, t.name as Territory 
from referrers r join Lead l on l.Id = r.leadId 
join Territory t on l. TerritoryID = t.Id) s 
pivot(count(Name) for Name in ([geoff],[fred])) p 

据我所看到的引荐就必须明确指定,所以你就必须产生一个SP的方括号列表,如果你想他们是动态。