0

2 つのテーブルがあります。リード、テリトリー、リファラー。

リードには列があります:

ID、名前、TerritoryId

リファラーには次のものがあります。

ID、リード ID、名前

地域には次のものがあります。

IDと名前

リードは常にテリトリーに関連し、リードは必要に応じてリファラーに関連付けることができます。

見込み客と紹介者のレコードは定期的に挿入されます (紹介者の頻度は低くなります)。次のような GridView でレポートを出力したいと考えています。

領土 | リード数 | Ref1 リード数 | Ref2 リード数 | Ref3 リード数

リーズ 10 1 7 2

エクセター 43 9 21 8

等...

問題は、テリトリー別にグループ化し、テリトリーごとに見込み客をカウントしたいということです....これで問題ありません:-

select t.Name, COUNT(1)
from Territory t inner join Lead l on l.TerritoryID = t.Id
t.Name でグループ化

しかし今、リファラーごとにカウントを分解したいと思います。

PIVOT で部分的にそれを行うことができることは理解していますが、リファラーをコードで明示的に記述する必要があることは理解しています。リファラーの行数に基づいて追加の列を追加する何らかの動的ピボットを実行する方法はありますか?

SP 内で動的 SQL を使用する必要がありますか?

4

1 に答える 1

0

このようなもの:

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で四角い括弧で囲まれたリストを生成する必要があります。

于 2009-10-22T09:42:56.437 に答える