Имя: Пароль:
1C
1C 7.7
v7: Как вставить запрос в sum. SQL
,
0 Adecvator
 
10.12.12
11:55
SELECT
sum(case when substring(СчетДт.SchKod,1,3) = '13.'
   and $Таб.АналитикаДт1 in (SELECT Спр.ID as НМА FROM $Справочник.НМА as Спр WITH (nolock)) then 1 else 0 end)
FROM ...
ругается на то что агрегатная функция, не может содержать select, как обойти?
1 mikecool
 
10.12.12
11:56
оберни в еще один запрос
2 lxndr
 
10.12.12
11:56
(0) вроде бы на тип значения можно проверить более изящным способом.
3 Adecvator
 
10.12.12
11:57
(1) можешь показать, как?
4 Дык ё
 
10.12.12
12:22
(3) тебе факт заполнения реквизита нужно проверить или его тип? потому как если второе, то твой запрос не работал бы, даже если бы прошел синтаксис контроль ;-)
5 Adecvator
 
10.12.12
12:32
(4) мне надо проверить факт заполнения реквизита АналитикаДт1, из выборки, но тип значения не всегда будет аналогичен типу из выборки.
6 Дык ё
 
10.12.12
12:36
(5) т.е. тип $Таб.АналитикаДт1 - справочник неопределенного вида? тогда

$Таб.АналитикаДт1 <> $ПустойИд13
7 Mikeware
 
10.12.12
12:36
м-дя..
8 Дык ё
 
10.12.12
12:37
+(6) или ближе к твоему тексту

left($Таб.АналитикаДт1, 4) = $ВидСправочника13.НМА
9 Дык ё
 
10.12.12
12:38
(7) а ты думал.. :-)
10 Дык ё
 
10.12.12
12:38
+(8) я тормоз: вместо $ВидСправочника13.НМА пиши $ВидСправочника36.НМА
11 viktor_vv
 
10.12.12
12:40
(6) Если $Таб.АналитикаДт1 из sentry dtsc то нихрена там не 13 будет длина. Там конечные пробелы обрезаны.
12 Adecvator
 
10.12.12
12:40
(10) только причем тут выборка и ошибка агрегатной функции, которая не может содержать select?
13 Mikeware
 
10.12.12
12:43
(12) ошибка не в агрегатной функции....
14 Adecvator
 
10.12.12
13:03
(10) а как может исчезнуть ошибка: State 42000, native 130, message [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot perform an aggregate function on an expression containing an aggregate or a subquery., если я просто вставлю условие: left($Таб.АналитикаДт1, 4) = $ВидСправочника36.НМА
15 Дык ё
 
10.12.12
13:09
(14) не вставишь, а заменишь. так что у тебя больше не будет subquery в aggregate function
16 Adecvator
 
10.12.12
13:19
сорри там вложенный запрос просто с условием:
SELECT
sum(case when substring(СчетДт.SchKod,1,3) = '13.'
  and $Таб.АналитикаДт1 in (
SELECT Спр.ID as НМА
FROM $Справочник.НМА as Спр WITH (nolock)
WHERE Спр.IsMark = 0
and $ПоследнееЗначение.ОС.Личный(Спр.ID, :ВыбДата) = 1) then 1 else 0 end)
FROM ...
17 Ёпрст
 
10.12.12
13:21
(16) вот это выкини
  and $Таб.АналитикаДт1 in (

SELECT Спр.ID as НМА

и замени на (8)

and left($Таб.АналитикаДт1, 4) = $ВидСправочника36.НМА
18 Mikeware
 
10.12.12
13:22
(16) это пипец...
ты чег получить хочешь-то???
19 Adecvator
 
10.12.12
13:29
(17)
$Таб.АналитикаДт1 in (
SELECT Спр.ID as НМА
from $Справочник.НМА as Спр WITH (nolock)
WHERE Спр.IsMark = 0
and left($Таб.АналитикаДт1, 4) = $ВидСправочника36.НМА
and $ПоследнееЗначение.ОС.Личный(Спр.ID, :ВыбДата) = 1) then 1 else 0 end
так?
20 Adecvator
 
10.12.12
13:31
(18) выбрать ОС, которые являются личными и подсчитать их, но это все в контексте большого запроса.
21 Mikeware
 
10.12.12
13:33
(20) ну и джойни ниже, а в агрегатом просто считай...
22 Ёпрст
 
10.12.12
14:04
(19) Ну и с ПоследнееЗначение ты тоже загнул - тоже будет ошибка
23 Ёпрст
 
10.12.12
14:05
(19) не не так..

я про функцию sum() говорил, что тебе оттуда надо выкинуть