2012-06-18 5 views
0

У меня возникла проблема, и я не могу понять, как исправить этот запрос. У меня есть временная таблица, один из столбцов должен содержать вычисленное значение другого столбца, деленное на сумму групп этого столбца. Я не знаю, как написать это, чтобы избежать ошибки.Обновление: подзапрос вернул более 1 значения

Declare @Temp Table 
(   
    ZipCode char(5) Not Null, 
    StateFacilityId varchar (50) Not Null, 
    Cnt int Not Null, 
    MarketShare float, 
    Row int Not Null, 
    Primary Key Clustered (ZipCode, StateFacilityId) 
); 


Insert Into @Temp (ZipCode, StateFacilityId, Cnt, Row) 
Select d.ZipCode, d.StateFacilityId, Cnt = COUNT(*), Row = ROW_NUMBER()OVER(PARTITION BY ZipCode ORDER BY Count(*) DESC) 
From [MarketShareIQData].[dbo].[tblServicesDetail] d  
Group By d.ZipCode, d.StateFacilityId 
; 


Update @Temp 
Set MarketShare =(h.Cnt/(
       Select SUM(h.Cnt) 
       From @Temp h 
       Group By ZipCode 
       )) 
From @Temp h 

ответ

1

A group by будет возвращать одну строку в группе. Я предполагаю, что вы ищете единственную группу с соответствующим zipcode. Вы можете сделать это как:

update h 
set  MarketShare = h.Cnt/
     (
     select sum(h2.Cnt) 
     from @Temp h2 
     where h2.ZipCode = h.ZipCode 
     ) 
from @Temp h 
+0

Я думаю, что хочу группу, я хочу, чтобы знаменатель был суммой подсчетов всех строк с одним и тем же почтовым индексом. – eshepard

Смежные вопросы