|
v7: 1C ДБФ, драйвер OLE DB неправильно вычисляется разность 2 чисел. | ☑ | ||
---|---|---|---|---|
0
Aristo
14.07.11
✎
12:25
|
Проблема яйца выеденного не стоит, но разбираемся час.
SELECT ТабПотребностей.Материал as [Материал$Справочник.Товары] ,ТабПотребностей.Производитель as [Производитель$Справочник.Клиенты] ,ТабПотребностей.КолВоМатериалаНужно КолВоМатериалаНужно ,ТабМатУПроизв.Количество КолВоМатериала ,ТабМатУПроизв.Количество - ТабПотребностей.КолВоМатериалаНужно as Излишек FROM ( SELECT $ТоварыВПроизводстве.Производитель Производитель, $ЭлементыРасходов.Материал as Материал, sum($ЭлементыРасходов.Количество*$ТоварыВПроизводстве.Количество) as КолВоМатериалаНужно --sum($ТоварыВПроизводстве.Количество) as КолВоМатериалаНужно FROM $РегистрИтоги.ТоварыВПроизводстве AS ТоварыВПроизводстве INNER JOIN $Справочник.Товары AS СпрТовары ON СпрТовары.Id = $ТоварыВПроизводстве.Товар INNER JOIN $Справочник.СпецификацииДляПроизводства AS Спец ON $СпрТовары.Спецификация = Спец.ID INNER JOIN $Справочник.НормыРасходовПроизводства Нормы ON $Нормы.Спецификация = Спец.ID AND $Нормы.Производитель = $ТоварыВПроизводстве.Производитель INNER JOIN $Справочник.ЭлементыРасходовПроизводства AS ЭлементыРасходов %nolock% ON ЭлементыРасходов.ParentExt = Нормы.ID AND ЭлементыРасходов.IsMark <> %ISMARK% WHERE ТоварыВПроизводстве.Period = :ДатаТА~~ AND $ТоварыВПроизводстве.Количество <> 0 Group by 1,2 ) ТабПотребностей LEFT JOIN ( SELECT $МатериалыУПроизводителей.Производитель AS Производитель, $МатериалыУПроизводителей.Материал AS Материал, SUM($МатериалыУПроизводителей.Количество) AS Количество FROM $РегистрИтоги.МатериалыУПроизводителей AS МатериалыУПроизводителей WHERE МатериалыУПроизводителей.Period = :ДатаТА~~ GROUP BY $МатериалыУПроизводителей.Производитель, $МатериалыУПроизводителей.Материал ) ТабМатУПроизв ON ТабПотребностей.Производитель = ТабМатУПроизв.Производитель AND ТабПотребностей.Материал = ТабМатУПроизв.Материал ORDER BY 1,2 HAVING (ТабПотребностей.КолВоМатериалаНужно <>0) OR (ТабМатУПроизв.Количество <>0) В запросе все подзапросы работают верно, КолВоМатериалаНужно и КолВоМатериала рассчитываются верно, но неверно считается их разность. Например, в выборке КолВоМатериалаНужно = 140, КолВоМатериала = 0, "Излишек" должен быть 140, показывает 0. Подозреваю что проблема в LEFT JOIN (null вместо 0), но я не знаю как это исправить. |
|||
1
smaharbA
14.07.11
✎
12:26
|
case
|
|||
2
Злопчинский
14.07.11
✎
12:27
|
ISNULL
|
|||
3
Aristo
14.07.11
✎
12:29
|
(2) подскажи, пожалуйста, как будет выглядеть применение этой функции на ДБФ ???
(1) а подробнее можно ? |
|||
4
Aristo
14.07.11
✎
12:29
|
Парни, мне не нужно SQL вариантов решения проблемы :)
|
|||
5
Ёпрст
14.07.11
✎
12:46
|
IIF(ISNULL(ТабМатУПроизв.Количество),0,ТабМатУПроизв.Количество) - ТабПотребностей.КолВоМатериалаНужно as Излишек
|
|||
6
Aristo
14.07.11
✎
14:27
|
(5) спасибо, помогло
|
|||
7
Aristo
14.07.11
✎
14:30
|
(5) а еще вопросик - можно ли в запросе промежуточные итоги по группировке "Материал" получить ?
|
|||
8
Ёпрст
14.07.11
✎
14:32
|
(7) да всё можно.
Промежуточные итоги, что в твоём понимании ? Сейчас у тебя - всё на ТА.. |
|||
9
Aristo
14.07.11
✎
14:37
|
Ну чтобы в таблице по первой группировке были итоги.
То есть сейчас таблица такая Материал 1 Произв 1 140 0 - 140 Материал 1 Произв 2 150 30 -120 Материал 2 Произв 1 .... Материал 2 Произв 2 .... А нужно как в выгрузке из обычного семерочного запроса Материал 1 .... 290 30 -260 (итог Материал 1 Произв 1 140 0 - 140 Материал 1 Произв 2 150 30 -120 Материал 2 (итог) Материал 2 Произв 1 .... Материал 2 Произв 2 .... |
|||
10
Aristo
14.07.11
✎
14:37
|
10 чтобы потом в цикле не считать
|
|||
11
Aristo
14.07.11
✎
15:33
|
уп
|
|||
12
Aristo
14.07.11
✎
15:42
|
как я понимаю, нужен какой нить аналог Rollup
|
|||
13
VoditelKobyly
15.07.11
✎
05:28
|
(12)
1. Объединить твой запрос с точно таким же, но с группировкой только по материалу. 2. Использовать индексированную таблицу значений и сгруппировать по нужным полям. |
|||
14
Aristo
15.07.11
✎
10:37
|
(13) спасибо, пойду по пути 2, наверное.
это я в принципе знал, я думал что у драйвера есть что - то типа rollup из transact - sql |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |