|
Разность полей в запросе | ☑ | ||
---|---|---|---|---|
0
Double_Medved
24.01.13
✎
14:04
|
Подскажите пожалуйста, вопрос простой, но что-то не выходит.. Как вычитать/складывать/перемножать поля в запросе? Вот например хочу вычесть одно поле из другого, но выходит пустое значение, ВЫРАЗИТЬ КАК Число тоже не помогает,поле Разница пустое, хотя вычитаемы поля заполнены:
ВЫБРАТЬ &Дата1 КАК Дата, ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены, ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура, ЦеныНоменклатурыСрезПоследних.Цена КАК Цена, ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура1, ТоварыНаСкладахОстатки.Склад, ТоварыНаСкладахОстатки.ВНаличииОстаток, ЦеныНоменклатурыСрезПоследних1.ВидЦены КАК ВидЦены1, ЦеныНоменклатурыСрезПоследних1.Номенклатура КАК Номенклатура2, ЦеныНоменклатурыСрезПоследних1.Цена КАК Цена1, ЦеныНоменклатурыСрезПоследних1.Цена - ЦеныНоменклатурыСрезПоследних.Цена КАК Разница ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(&Дата)}, ) КАК ЦеныНоменклатурыСрезПоследних, РегистрНакопления.ТоварыНаСкладах.Остатки({(&Дата)}, ) КАК ТоварыНаСкладахОстатки, РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних1 ГДЕ ТоварыНаСкладахОстатки.Склад = &Склад И ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦены1 И ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура И ЦеныНоменклатурыСрезПоследних1.ВидЦены = &ВидЦены2 И ЦеныНоменклатурыСрезПоследних1.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура |
|||
1
Maxus43
24.01.13
✎
14:06
|
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(&Дата)}, ) КАК ЦеныНоменклатурыСрезПоследних, РегистрНакопления.ТоварыНаСкладах.Остатки({(&Дата)}, ) КАК ТоварыНаСкладахОстатки, РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних1 расстрелять на месте. |
|||
2
Double_Medved
24.01.13
✎
14:09
|
А, ну знаю что не красиво...., потом сделаю по-человечески
|
|||
3
Double_Medved
24.01.13
✎
14:10
|
Опа, РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних1, тут дату не указал...
|
|||
4
Domanoff26
24.01.13
✎
14:11
|
(3) и нафиг тебе два одинаковых, или там разные даты?
|
|||
5
Double_Medved
24.01.13
✎
14:11
|
Все равно - я не понимаю, оба значения
ЦеныНоменклатурыСрезПоследних1.Цена - ЦеныНоменклатурыСрезПоследних.Цена КАК Разница Заполнены, но не вычитаются... Знаю что ерундовый вопрос.. Не выходит блин, помогите плиз, только вычесть одно поле из другого осталось |
|||
6
Double_Medved
24.01.13
✎
14:12
|
Там разные виды цен, типа закупочная и розничная
|
|||
7
Maxus43
24.01.13
✎
14:13
|
(2) это не некрасиво, это Кроссджойн 3-х таблиц. Не было бы ограничений в "ГДЕ" - платформа повесилась бы от негодования и общего расстройства психики. Юзай нормальные соединения таблиц
|
|||
8
Domanoff26
24.01.13
✎
14:13
|
чего то не понимаю, где твои соединения таблиц?
|
|||
9
Domanoff26
24.01.13
✎
14:14
|
вид цен указывай в параметрах
|
|||
10
hhhh
24.01.13
✎
14:14
|
(5) ну убери запятые и поставь СОЕДИНЕНИЕ между таблицами. Тогда может и вычтется.
Непонятно, что из чего ты вообще вычитаешь. Например в одном срезе 1000 записей, в другом две тысячи. Как все эти записи друг из друга вычтутся? |
|||
11
Domanoff26
24.01.13
✎
14:15
|
(7) ЦеныНоменклатурыСрезПоследних1.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура , а ты скажешь что это за условие такое вместо соединения7
|
|||
12
Kreont
24.01.13
✎
14:16
|
да все как раз от того что нету соединения, см (8)(10).
У тебя в результате слева столбец цен, справа пусто, потом ниже наоборот |
|||
13
Maxus43
24.01.13
✎
14:22
|
(11) не скажу, это имеет мало смысла
|
|||
14
Double_Medved
24.01.13
✎
14:24
|
Переписал чуть-чуть понятнее,надеюсь:
ВЫБРАТЬ &Дата1 КАК Дата, ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура1, ТоварыНаСкладахОстатки.Склад, ТоварыНаСкладахОстатки.ВНаличииОстаток, ЦеныНоменклатурыСрезПоследнихЗакупочная.ВидЦены КАК ВидЦены, ЦеныНоменклатурыСрезПоследнихЗакупочная.Номенклатура КАК Номенклатура, ЦеныНоменклатурыСрезПоследнихЗакупочная.Цена КАК Цена, ЦеныНоменклатурыСрезПоследнихРозничная.ВидЦены КАК ВидЦены1, ЦеныНоменклатурыСрезПоследнихРозничная.Номенклатура КАК Номенклатура2, ЦеныНоменклатурыСрезПоследнихРозничная.Цена КАК Цена1, ЦеныНоменклатурыСрезПоследнихРозничная.Цена - ЦеныНоменклатурыСрезПоследнихЗакупочная.Цена КАК Разница ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(&Дата)}, ) КАК ЦеныНоменклатурыСрезПоследнихЗакупочная, РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(&Дата)}, ) КАК ЦеныНоменклатурыСрезПоследнихРозничная, РегистрНакопления.ТоварыНаСкладах.Остатки({(&Дата)}, ) КАК ТоварыНаСкладахОстатки ГДЕ ТоварыНаСкладахОстатки.Склад = &Склад И ЦеныНоменклатурыСрезПоследнихЗакупочная.ВидЦены = &ВидЦены1 И ЦеныНоменклатурыСрезПоследнихРозничная.ВидЦены = &ВидЦены2 И ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследнихЗакупочная.Номенклатура И ЦеныНоменклатурыСрезПоследнихРозничная.Номенклатура = ЦеныНоменклатурыСрезПоследнихЗакупочная.Номенклатура |
|||
15
Domanoff26
24.01.13
✎
14:25
|
(14)СОЕДИНЯЙ, пока чушь
|
|||
16
Double_Medved
24.01.13
✎
14:26
|
Вообщем он выбирает номенклатуру которая есть на складе, потом цены Закупочные и цены Розничные, выбирает там где одинаковая номенклатура, я понимаю, код индусский. Но он все правильно выводит, Номенклатуру, Остатки, ЦенуЗакупочную и ЦенуРозничную..., только разность не делает
|
|||
17
hhhh
24.01.13
✎
14:33
|
(16) делает он разность, но как понимаешь, только в строчках, где обе цены есть. Ты проверяй не на первой странице отчета, а где-то начиная с 20-й страницы отчета разность должна появляться.
|
|||
18
Domanoff26
24.01.13
✎
14:35
|
на фиг писать, если не слушаешь никого
|
|||
19
ssh2006
24.01.13
✎
14:35
|
(16) брось хренью заниматься, сделай нормальный запрос, используй ЕСТЬNULL(), где необходимо
|
|||
20
Double_Medved
24.01.13
✎
14:54
|
Да я понимаю что соединять по Условию где Номенклатура = Номенклатура1 это некрасиво, Но он корректно все выводит, кроме этой разности. То есть в каждой строчке правильые количество и цены номенклатуры. Подскажите, как примерно соединять таблицы, вот например по этой Номенклатуре, просто я всегда использовал ГДЕ. Ну хоть на пальцах.
|
|||
21
Maxus43
24.01.13
✎
15:02
|
вот как соединять, без разницы цен
ВЫБРАТЬ ТоварыОрганизацийОстатки.Номенклатура, ТоварыОрганизацийОстатки.ХарактеристикаНоменклатуры, ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена ИЗ РегистрНакопления.ТоварыОрганизаций.Остатки(&дата, ) КАК ТоварыОрганизацийОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&дата, ТипЦен = &тип) КАК ЦеныНоменклатурыСрезПоследних ПО ТоварыОрганизацийОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура И ТоварыОрганизацийОстатки.ХарактеристикаНоменклатуры = ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры |
|||
22
Maxus43
24.01.13
✎
15:03
|
(20) ещё раз (7) прочитай, это НЕ НЕкрасиво, это просто неправильно. Кроссджойн - получается что-то типа соединения Всех полей Со Всеми полями других таблиц
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |