|
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() говорил, что тебе оттуда надо выкинуть |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |