동적으로 어떻게 피벗해야합니까?
-
05-07-2019 - |
문제
나는 두 개의 테이블이 있습니다. 리드, 영토 및 추천자.
리드에는 열이 있습니다.
ID, Name, TerritoryId
추천서는 다음과 같습니다.
ID, LeadId, Name
영토는 다음과 같습니다.
ID and Name
리드는 항상 영토와 관련이 있으며 리드는 선택적으로 추천자와 관련 될 수 있습니다.
리드 및 참조 레코드는 정기적으로 삽입됩니다 (참조자가 덜 자주). 그리드 뷰에서 보고서를 출력하고 싶습니다.
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
그러나 이제 나는 추천자에 의해 수를 분해하고 싶습니다.
나는 피벗으로 부분적으로 그렇게 할 수 있다는 것을 이해하지만, 나는 코드의 참조기를 명시 적으로 언급해야한다는 것을 이해합니다. 참조자의 행 수를 기반으로 추가 열을 추가하는 일종의 동적 피벗을 수행 할 수있는 방법이 있습니까?
SP 내부에서 동적 SQL을 사용해야합니까?
해결책
이 같은:
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에서 Square Bracketed 목록을 생성해야합니다.
제휴하지 않습니다 StackOverflow