最初にサブクエリを一時テーブルに実行してカウントを収集してから、合計カウントを取得してみます。クエリのセットアップ方法では、PCapps の行ごとにこれらのサブクエリを 1 回ずつ実行するため、時間がかかります。
次のようにしてみてください:
declare @t table (Computer varchar(10), Sequence int, Site varchar(3), SoftwareName varchar(20), OS varchar(20) )
insert into @t values
('C1',1,'BKN','Adobe Acrobat','Win7')
,('C2',1,'BKN','Adobe Acrobat','Win7')
,('C3',1,'BKN','Adobe Acrobat','Win7')
,('C1',1,'BKN','AutoCAD LT ','Win7')
,('C3',1,'BKN','AutoCAD LT ','Win7')
,('B1',2,'CTW','Adobe Acrobat','Win7')
,('B2',2,'CTW','Adobe Acrobat','Win7')
,('B3',3,'CTW','Adobe LT','Win7')
,('B4',3,'CTW','Adobe Acrobat','Win7')
,('A1',2,'CTW','Adobe Acrobat','Win7')
,('A2',2,'CTW','Adobe LT','Win7')
,('A3',2,'CTW','Adobe Acrobat','Win7')
,('X4',3,'CTW','Adobe Acrobat','WinXP')
,('X1',2,'CTW','Adobe Acrobat','WinXP')
,('X2',2,'CTW','Adobe LT','WinXP')
,('X3',2,'CTW','Adobe Acrobat','WinXP')
,('A4',2,'CTW','Adobe Acrobat','Win7');
SELECT
Site,
OS,
SoftwareName,
Sequence,
COUNT(SoftwareName) as 'Count'
into #SiteSpecific
FROM @t
group by Site, OS, SoftwareName, Sequence;
WITH PCapps AS (
SELECT DISTINCT
Computer,
Sequence,
Site,
SoftwareName,
OS
FROM @t
)
SELECT
DISTINCT
PC.SoftwareName,
PC.Sequence,
PC.Site,
PerSeq.[Count] as 'Win7Installs/seq',
PerSite.[Count] as TotWin7apps,
total.[Count] as TotalInstalls
FROM PCapps pc
inner join (select SoftwareName, Sequence, OS, sum([Count]) [Count] from #SiteSpecific group by SoftwareName, Sequence, OS) PerSeq
on PerSeq.SoftwareName = pc.Softwarename
AND PerSeq.Sequence = pc.Sequence
AND PerSeq.OS = pc.OS
inner join (select SoftwareName, Site, OS, sum([Count]) [Count] from #SiteSpecific group by SoftwareName, Site, OS) PerSite
on PerSite.SoftwareName = pc.Softwarename
AND PerSite.Site = pc.Site
AND PerSite.OS = pc.OS
inner join (select SoftwareName, sum([Count]) [Count] from #SiteSpecific group by SoftwareName) Total
on Total.SoftwareName = pc.Softwarename
where Pc.OS='Win7'
order by SoftwareName, Sequence, Site