Como faço para girar dinamicamente
-
05-07-2019 - |
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?
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.