Domanda

Ho due tabelle; Lead, Territori e Referrer.

Il lead ha colonne:

ID, Name, TerritoryId

I referrer hanno:

ID, LeadId, Name

Il territorio ha:

ID and Name

Un lead si riferisce sempre a un territorio e un lead può facoltativamente fare riferimento a un Referrer.

I record di lead e referrer vengono regolarmente inseriti (referrer meno frequentemente). Voglio produrre un rapporto in un GridView che assomigli a questo:

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

Leeds       10            1                7                 2

Exeter     43             9                21                8

etc...

OK, quindi il problema è che voglio raggruppare per territorio e contare i lead per territorio .... va bene: -

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

Ma ora voglio analizzare il conteggio per referrer.

Capisco di poterlo fare in parte con PIVOT, tuttavia capisco che devo dichiarare esplicitamente i Referrer nel codice. Esiste un modo per eseguire una sorta di pivot dinamico che aggiunge ulteriori colonne in base al numero di righe in Referrer?

Dovrei usare SQL dinamico all'interno di un SP?

È stato utile?

Soluzione

qualcosa del genere:

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

Per quanto posso vedere i referrer dovrebbero essere specificati in modo esplicito, quindi dovresti generare l'elenco tra parentesi quadre in uno sp se vuoi che siano dinamici.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top