2015-03-31 3 views
1

У меня есть проблема, что если я запускаю этот запрос:SQL Server создает ненужные строки

select 
    l.SiteID, 
    coalesce(sum(case when a.[TypeKey] = 1 then a.Calc else 0 end)/
nullif(case when TypeKey = 1 then count(l.LocationType) else 0 end, 0), 0) as 'My Type 1 avg', 
    coalesce(sum(case when a.[TypeKey] = 2 then a.Calc else 0 end)/
nullif(case when TypeKey = 2 then count(l.LocationType) else 0 end, 0), 0) as 'My Type 2 avg' 
from 
    @NumberOfPeople a 
inner join 
    Dim.Locations l on a.LocationType = l.LocationType 
group by 
    SiteID, TypeKey 

Всякий раз, когда он находит второй тип записи, он создает новую строку вместо того, чтобы поместить число в обеих Созданные мной средние столбцы Type.

Что его возвращение заключается в следующем:

|SiteID|My Type 1 avg|My Type 2 avg| 
|1  |1.0   |0   | 
|2  |1.5   |0   | 
|3  |2.5   |0   | 
|1  |0.0   |   1.5| 

В результате я хочу видеть из этого запроса:

|SiteID|My Type 1 avg|My Type 2 avg| 
|1  |1.0   |   1.5| 
|2  |1.5   |0   | 
|3  |2.5   |0   | 

Я думаю, что проблема в группе By TypeKey является то, что вызывает такое поведение? И все же я не могу просто удалить его из-за правил - как тогда жалуется, что его не часть этой группы по:

TypeKey is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 

Любые предложения?

ответ

1

попробовать что-то вроде этого

;WITH grouptable(
select l.SiteID, 
coalesce(sum(case when a.[TypeKey] = 1 then a.Calc else 0 end)/
nullif(case when TypeKey = 1 then count(l.LocationType) else 0 end, 0), 0) as 'My Type 1 avg', 

coalesce(sum(case when a.[TypeKey] = 2 then a.Calc else 0 end)/
nullif(case when TypeKey = 2 then count(l.LocationType) else 0 end, 0), 0) as 'My Type 2 avg' 
from 
@NumberOfPeople a 
inner join Dim.Locations l 
on a.LocationType = l.LocationType 
group by 
SiteID, 
TypeKey 
) 
SELECT SiteID,SUM([My Type 1 avg]) [My Type 1 avg],SUM([My Type 2 avg]) [My Type 2 avg] 
FROM grouptable 
GROUP BY SiteID 
+0

Колонка «grouptable.My Тип 1 ср» недопустим в списке выбора, поскольку он не содержится ни в статистической функции или предложения GROUP BY. –

+0

@AlinaVinnichek, пожалуйста, попробуйте обновленный запрос – ughai

+0

Ah awesome, cheers, который работает сейчас !!! –

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