Pergunta

Eu tenho duas tabelas; Leads, Territórios e Referrers.

Chumbo tem colunas:

ID, Name, TerritoryId

Referrers tem:

ID, LeadId, Name

Território tem:

ID and Name

Um levar sempre refere-se a um território e a um condutor pode, opcionalmente, relacionar a um referencial.

Leads e registros referenciadores são regularmente inserido (Referrers com menos frequência). Eu quero saída de um relatório em um GridView que tem esta aparência:

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

Leeds       10            1                7                 2

Exeter     43             9                21                8

etc...

OK, então o problema é, eu quero grupo por Território e contar as ligações por território .... isso é bom: -

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

Mas agora eu quero quebrar contagem por referente.

Eu compreendo que eu posso fazer isso em parte com PIVOT, no entanto, eu entendo que eu tenho que declarar explicitamente os Referrers no código. Existe alguma maneira de realizar algum tipo de pivô dinâmico que acrescenta colunas adicionais com base no número de linhas em Referente?

Será que eu tenho que usar SQL dinâmico dentro de um SP?

Foi útil?

Solução

algo como isto:

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

Tanto quanto eu posso ver as referências teria que ser especificado explicitamente, então você teria que gerar a lista entre colchetes quadrados em um sp se você queria que eles fossem dinâmica.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top