Можно iif в iifе

lexxora
Дата: 09.09.2005 12:41:40
Access 2003, WinXP

При выполнении запроса выдается:
Попытка выполнить запрос, который не включает указанное выражени
'If(BD.[Принято письменное заявление]=1,
sum(IIf(isnull(Службы.[Служба ключ]),0,1)*Службы.Колвозаяв)
,0)' как часть статистической функции или группы.

Сам запрос.

SELECT [Справочник районы].горрайорган,


IIf(BD.[Принято письменное заявление]=1,
sum(IIf(isnull(Службы.[Служба ключ]),0,1)*Службы.Колвозаяв)
,0)
AS [Всего поступило]

FROM [Справочник районы] INNER JOIN (BD INNER JOIN Службы ON BD.Ключ=Службы.Ключ) ON [Справочник районы].[Горрайорган ключ]=BD.[Горрайорган ключ]
WHERE (((BD.[Дата приёма]) Between Forms![Параметры отчёта]!fdataplat And Forms![Параметры отчёта]!fdatauch))
GROUP BY [Справочник районы].горрайорган;

Что получается IIF в IIF писать нельзя?
Polev
Дата: 09.09.2005 12:49:35
Похоже нужен
Sum(IIf(BD.[Принято письменное заявление]=1,
sum(IIf(isnull(Службы.[Служба ключ]),0,1)*Службы.Колвозаяв)
,0))
AS [Всего поступило]
Владимир Саныч
Дата: 09.09.2005 12:51:22
Дело не в IIF, а в полях, которые в нем перечислены, а в Group By не включены и никакая агрегатная функция для них не указана. В сообщении ведь сказано: "не включает ... как часть статистической функции или группы". Например, если в записях, образующих группу, поле Колвозаяв имеет разные значения, то какое из них брать?
adv
Дата: 09.09.2005 12:52:12
BD.[Принято письменное заявление]=1
можно поставить в where
В поле запроса:
sum(IIf(isnull(Службы.[Служба ключ]),0,1)*Службы.Колвозаяв)
adv
Дата: 09.09.2005 12:59:16
adv
Службы.[Служба ключ] is null

тоже можно поставить в where
тогда вообще остантся
sum(Службы.Колвозаяв)
lexxora
Дата: 09.09.2005 13:01:47
Polev
Похоже нужен
Sum(IIf(BD.[Принято письменное заявление]=1,
sum(IIf(isnull(Службы.[Служба ключ]),0,1)*Службы.Колвозаяв)
,0))
AS [Всего поступило]


Это не прокатило!
lexxora
Дата: 09.09.2005 13:03:30
adv
adv
Службы.[Служба ключ] is null

тоже можно поставить в where
тогда вообще остантся
sum(Службы.Колвозаяв)


Запрос выглядит полность так:

sum(IIf(isnull(Службы.[Служба ключ]),0,1)*Службы.Колвозаяв),

sum(IIf(isnull(Службы.Номер),0,1)*Службы.Колвозаяв))

AS [Всего поступило]
lexxora
Дата: 09.09.2005 13:04:42
lexxora
adv
adv
Службы.[Служба ключ] is null

тоже можно поставить в where
тогда вообще остантся
sum(Службы.Колвозаяв)


Запрос выглядит полность так:

sum(IIf(isnull(Службы.[Служба ключ]),0,1)*Службы.Колвозаяв),

sum(IIf(isnull(Службы.Номер),0,1)*Службы.Колвозаяв))

AS [Всего поступило]


Тоесть так:
IIf(BD.[Принято письменное заявление]=1,

sum(IIf(isnull(Службы.[Служба ключ]),0,1)*Службы.Колвозаяв),

sum(IIf(isnull(Службы.Номер),0,1)*Службы.Колвозаяв))

AS [Всего поступило]
lexxora
Дата: 09.09.2005 13:12:07
Владимир Саныч
Дело не в IIF, а в полях, которые в нем перечислены, а в Group By не включены и никакая агрегатная функция для них не указана. В сообщении ведь сказано: "не включает ... как часть статистической функции или группы". Например, если в записях, образующих группу, поле Колвозаяв имеет разные значения, то какое из них брать?


Я не понимаю что это и как. Подставлял Колвозаяв в GROUP BY. Не прокатывает.
lexxora
Дата: 09.09.2005 13:25:47
Polev
Похоже нужен
Sum(IIf(BD.[Принято письменное заявление]=1,
sum(IIf(isnull(Службы.[Служба ключ]),0,1)*Службы.Колвозаяв)
,0))
AS [Всего поступило]



Вот так прокатило!!!

SELECT [Справочник районы].горрайорган,

sum(IIf(BD.[Принято письменное заявление]=1,

IIf(isnull(Службы.[Служба ключ]),0,1)*Службы.Колвозаяв,

IIf(isnull(Службы.Номер),0,1)*Службы.Колвозаяв) )

AS [Всего поступило]


FROM [Справочник районы] INNER JOIN (BD INNER JOIN Службы ON BD.Ключ=Службы.Ключ) ON [Справочник районы].[Горрайорган ключ]=BD.[Горрайорган ключ]
WHERE (((BD.[Дата приёма]) Between Forms![Параметры отчёта]!fdataplat And Forms![Параметры отчёта]!fdatauch))
GROUP BY [Справочник районы].горрайорган;