2009-10-21 20 views
0

J'ai deux tables; Leads, Territoires et Référents.Comment pivoter dynamiquement

plomb a des colonnes:

ID, Name, TerritoryId

Affluents a:

ID, LeadId, Name

Territoire a:

ID and Name

Un plomb se rapporte toujours à un territoire et un chef de file peut éventuellement se rapporter à un Référent.

Les enregistrements Leads et Referrer sont régulièrement insérés (les référents moins fréquemment). Je veux sortir un rapport dans un GridView qui ressemble à ceci:

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

Leeds  10   1    7     2 

Exeter  43    9    21    8 

etc... 

OK, donc le problème est, je veux groupe par territoire et le nombre des conducteurs par territoire .... c'est très bien: -

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

Mais maintenant, je veux décomposer compte par référent. Je comprends que je peux le faire en partie avec PIVOT, cependant, je comprends que je dois indiquer explicitement les référents dans le code. Est-il possible d'effectuer une sorte de pivot dynamique qui ajoute des colonnes supplémentaires en fonction du nombre de lignes dans Referrer?

Aurais-je besoin d'utiliser SQL dynamique dans un SP?

Répondre

0

quelque chose comme ceci:

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 

Pour autant que je peux voir que les référenceurs devraient si vous vouliez préciser explicitement, donc vous devez générer la liste entre crochets carrés dans un sp pour être dynamique .