|
Оператор Не В в запросах | ☑ | ||
---|---|---|---|---|
0
amadeus2010
08.06.12
✎
14:03
|
Добрый день, помогите разобраться как использовать оператор В в запросах.Есть 2 запроса соединенные между собой через правое соединение.Эти запросы соединяются с основным запросом так
////////////////////////////////////////////////////////////////// ГДЕ ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток > 0 И (НЕ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка В (ВЫБРАТЬ ВТБ.Заказ ИЗ ВТЗаказПоКоличествуКассет КАК ВТБ)) /////////////////////////////////////////////////////////////////// Смысл соединения 2 запросов с основным в том чтобы не выводить заказы покупателя где количество товара меньше 5 единиц.При выводе в консоль отчетов выходят пустые поля. Если я убираю НЕ то выводится список товаров где количество товара меньше 5,т.е то что должно отсекаться.В чем ошибка написания запроса? |
|||
1
DrShad
08.06.12
✎
14:06
|
это не соединение
|
|||
2
amadeus2010
08.06.12
✎
14:23
|
у меня есть
/////////////////////////////////////////////////////////////////////// запрос1 выбрать заказы.ссылка, количество поместить ВТЗаказы из.... где количество<5 правое соединение запрос2 выбрать заказ.ссылка,количество основной запрос.............с содержимым где ГДЕ ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток > 0 И (НЕ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка В (ВЫБРАТЬ ВТБ.Заказ ИЗ ВТЗаказПоКоличествуКассет КАК ВТБ)) ////////////////////////////////////////////////////////////////////////////// |
|||
3
Buster007
08.06.12
✎
14:25
|
может нет больше 5?
|
|||
4
amadeus2010
08.06.12
✎
14:26
|
(3) не совсем понял вас
|
|||
5
vicof
08.06.12
✎
14:26
|
можно попридираться?
1. .Ссылка не нужно 2. Нормально запрос можно было выложить? |
|||
6
amadeus2010
08.06.12
✎
14:28
|
я могу выложить весь запрос только он очень большой и вряд ли кто-нибудь будет его читать в пятницу после обеда:))
|
|||
7
Buster007
08.06.12
✎
14:30
|
а, догнал, не из той таблицы ты данные тащишь судя по всему раз пустые поля выводятся
|
|||
8
ssh2006
08.06.12
✎
14:31
|
(2) из-за где количество<5 соединение становится внутренним
|
|||
9
Buster007
08.06.12
✎
14:35
|
(8) а я подумал что это другой запрос...
|
|||
10
amadeus2010
08.06.12
✎
14:35
|
ну что же придется выложить весь запрос может что-то прояснится
//////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТоварыКРаспределениюПоРейсамОстаткиПЕТШАХДАГ.Заказ ПОМЕСТИТЬ ВТЗаказПоКоличествуКассет ИЗ (ВЫБРАТЬ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка КАК Заказ, СУММА(ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток / ТоварыКРаспределениюПоРейсамОстатки.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент) КАК КоличествоОБЩЕЕ ИЗ РегистрНакопления.ТоварыКРаспределениюПоРейсам.Остатки( &Дата, ЗаказПокупателя.ДатаОтгрузки >= &ЗаказПокупателяДатаНачала И ЗаказПокупателя.ДатаОтгрузки <= &ЗаказПокупателяДатаКонца) КАК ТоварыКРаспределениюПоРейсамОстатки СГРУППИРОВАТЬ ПО ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка ИМЕЮЩИЕ СУММА(ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток / ТоварыКРаспределениюПоРейсамОстатки.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент) < 5) КАК ТоварыКРаспределениюПоРейсамОстаткиОБЩЕЕ ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка КАК Заказ, СУММА(ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток / ТоварыКРаспределениюПоРейсамОстатки.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент) КАК КоличествоШахдагПЕТ ИЗ РегистрНакопления.ТоварыКРаспределениюПоРейсам.Остатки( &Дата, ЗаказПокупателя.ДатаОтгрузки >= &ЗаказПокупателяДатаНачала И ЗаказПокупателя.ДатаОтгрузки <= &ЗаказПокупателяДатаКонца И (Номенклатура.Родитель.Ссылка В ИЕРАРХИИ (&ПЕТ) ИЛИ Номенклатура.Родитель.Ссылка В ИЕРАРХИИ (&ШАХДАГ))) КАК ТоварыКРаспределениюПоРейсамОстатки СГРУППИРОВАТЬ ПО ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка) КАК ТоварыКРаспределениюПоРейсамОстаткиПЕТШАХДАГ ПО (ТоварыКРаспределениюПоРейсамОстаткиПЕТШАХДАГ.Заказ = ТоварыКРаспределениюПоРейсамОстаткиОБЩЕЕ.Заказ) И (ТоварыКРаспределениюПоРейсамОстаткиПЕТШАХДАГ.КоличествоШахдагПЕТ = ТоварыКРаспределениюПоРейсамОстаткиОБЩЕЕ.КоличествоОБЩЕЕ) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура, ТоварыНаСкладахОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, ТоварыНаСкладахОбороты.СерияНоменклатуры КАК СерияНоменклатуры, ТоварыНаСкладахОбороты.Регистратор.Рейс КАК РегистраторРейс, СУММА(ТоварыНаСкладахОбороты.КоличествоПриход) КАК КоличествоПриход ПОМЕСТИТЬ ВТТоварыНаСкладахОбороты ИЗ РегистрНакопления.ТоварыНаСкладах.Обороты(, , Регистратор, Склад.ТипСклада = &СкладМашина) КАК ТоварыНаСкладахОбороты ГДЕ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров И ТоварыНаСкладахОбороты.Регистратор.СкладПолучатель.ТипСклада = &СкладМашина СГРУППИРОВАТЬ ПО ТоварыНаСкладахОбороты.Номенклатура, ТоварыНаСкладахОбороты.ХарактеристикаНоменклатуры, ТоварыНаСкладахОбороты.СерияНоменклатуры, ТоварыНаСкладахОбороты.Регистратор.Рейс ИНДЕКСИРОВАТЬ ПО Номенклатура, ХарактеристикаНоменклатуры, СерияНоменклатуры, РегистраторРейс ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТоварыВРейсахОбороты.Рейс КАК Рейс, ТоварыВРейсахОбороты.Номенклатура КАК Номенклатура, ТоварыВРейсахОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, ТоварыВРейсахОбороты.СерияНоменклатуры КАК СерияНоменклатуры, СУММА(ЕСТЬNULL(ТоварыВРейсахОбороты.КоличествоОборот, 0)) КАК КоличествоОборот ПОМЕСТИТЬ ВТТоварыВРейсахОбороты ИЗ РегистрНакопления.ТоварыВРейсах.Обороты(, , , Состояние <> &CостояниеРейсаЗакрыт) КАК ТоварыВРейсахОбороты СГРУППИРОВАТЬ ПО ТоварыВРейсахОбороты.Рейс, ТоварыВРейсахОбороты.Номенклатура, ТоварыВРейсахОбороты.ХарактеристикаНоменклатуры, ТоварыВРейсахОбороты.СерияНоменклатуры ИНДЕКСИРОВАТЬ ПО Рейс, Номенклатура, ХарактеристикаНоменклатуры, СерияНоменклатуры ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(ВЫБОР КОГДА ВТТоварыВРейсахОбороты.КоличествоОборот - ЕСТЬNULL(ВТТоварыНаСкладахОбороты.КоличествоПриход, 0) > 0 ТОГДА ВТТоварыВРейсахОбороты.КоличествоОборот - ЕСТЬNULL(ВТТоварыНаСкладахОбороты.КоличествоПриход, 0) ИНАЧЕ 0 КОНЕЦ) КАК КоличествоОборот, ВТТоварыВРейсахОбороты.Номенклатура КАК Номенклатура, ВТТоварыВРейсахОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, ВТТоварыВРейсахОбороты.СерияНоменклатуры КАК СерияНоменклатуры ПОМЕСТИТЬ ВТТоварыВРейсах ИЗ ВТТоварыВРейсахОбороты КАК ВТТоварыВРейсахОбороты ЛЕВОЕ СОЕДИНЕНИЕ ВТТоварыНаСкладахОбороты КАК ВТТоварыНаСкладахОбороты ПО ВТТоварыВРейсахОбороты.Рейс = ВТТоварыНаСкладахОбороты.РегистраторРейс И ВТТоварыВРейсахОбороты.Номенклатура = ВТТоварыНаСкладахОбороты.Номенклатура И ВТТоварыВРейсахОбороты.ХарактеристикаНоменклатуры = ВТТоварыНаСкладахОбороты.ХарактеристикаНоменклатуры И ВТТоварыВРейсахОбороты.СерияНоменклатуры = ВТТоварыНаСкладахОбороты.СерияНоменклатуры СГРУППИРОВАТЬ ПО ВТТоварыВРейсахОбороты.Номенклатура, ВТТоварыВРейсахОбороты.ХарактеристикаНоменклатуры, ВТТоварыВРейсахОбороты.СерияНоменклатуры ИНДЕКСИРОВАТЬ ПО КоличествоОборот, Номенклатура, ХарактеристикаНоменклатуры, СерияНоменклатуры ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Контрагент.КодОракл КАК КодОракл, ВЫБОР КОГДА ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Грузополучатель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) ТОГДА ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Контрагент.Регион ИНАЧЕ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Грузополучатель.Регион КОНЕЦ КАК Регион, ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Контрагент КАК Контрагент, ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Контрагент.Наименование КАК КонтрагентНаименование, ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя КАК Заказ, ТоварыКРаспределениюПоРейсамОстатки.Номенклатура, ТоварыКРаспределениюПоРейсамОстатки.ХарактеристикаНоменклатуры, ТоварыКРаспределениюПоРейсамОстатки.СерияНоменклатуры, ТоварыКРаспределениюПоРейсамОстатки.ЕдиницаИзмерения, ТоварыКРаспределениюПоРейсамОстатки.ТипПоставки, ТоварыКРаспределениюПоРейсамОстатки.Цена, ТоварыКРаспределениюПоРейсамОстатки.СтавкаНДС, ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток КАК КоличествоКРаспределению, ТоварыКРаспределениюПоРейсамОстатки.СуммаВзаиморасчетовОстаток КАК Сумма, ТоварыКРаспределениюПоРейсамОстатки.ЕдиницаИзмерения.Вес * ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток / ТоварыКРаспределениюПоРейсамОстатки.ЕдиницаИзмерения.Коэффициент * ТоварыКРаспределениюПоРейсамОстатки.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Вес, ТоварыКРаспределениюПоРейсамОстатки.СуммаУпрОстаток КАК СуммаУпр, ТоварыКРаспределениюПоРейсамОстатки.ЕдиницаИзмерения.Объем * ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток / ТоварыКРаспределениюПоРейсамОстатки.ЕдиницаИзмерения.Коэффициент * ТоварыКРаспределениюПоРейсамОстатки.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Объем, ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Дата, ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Номер, ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ВТТоварыВРейсах.КоличествоОборот, 0) КАК КоличествоОстаток ИЗ ВТЗаказПоКоличествуКассет КАК ВТПоКолВуКассет ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКРаспределениюПоРейсам.Остатки( &Дата, ЗаказПокупателя.ДатаОтгрузки >= &ЗаказПокупателяДатаНачала И ЗаказПокупателя.ДатаОтгрузки <= &ЗаказПокупателяДатаКонца) КАК ТоварыКРаспределениюПоРейсамОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаРейс, Склад.ТипСклада <> &СкладМашина) КАК ТоварыНаСкладахОстатки ПО ТоварыКРаспределениюПоРейсамОстатки.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура И ТоварыКРаспределениюПоРейсамОстатки.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры И ТоварыКРаспределениюПоРейсамОстатки.СерияНоменклатуры = ТоварыНаСкладахОстатки.СерияНоменклатуры ЛЕВОЕ СОЕДИНЕНИЕ ВТТоварыВРейсах КАК ВТТоварыВРейсах ПО ТоварыКРаспределениюПоРейсамОстатки.Номенклатура = ВТТоварыВРейсах.Номенклатура И ТоварыКРаспределениюПоРейсамОстатки.ХарактеристикаНоменклатуры = ВТТоварыВРейсах.ХарактеристикаНоменклатуры И ТоварыКРаспределениюПоРейсамОстатки.СерияНоменклатуры = ВТТоварыВРейсах.СерияНоменклатуры ПО (ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка <> ВТПоКолВуКассет.Заказ) ГДЕ ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток > 0 И (НЕ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка В (ВЫБРАТЬ ВТБ.Заказ ИЗ ВТЗаказПоКоличествуКассет КАК ВТБ)) УПОРЯДОЧИТЬ ПО Регион, КонтрагентНаименование ИТОГИ СУММА(КоличествоКРаспределению), СУММА(Сумма), СУММА(Вес), СУММА(СуммаУпр), СУММА(Объем) ПО Регион, Контрагент, Заказ ////////////////////////////////////////////////////////////////// |
|||
11
amadeus2010
08.06.12
✎
14:44
|
есть какие-либо предложения по теме вопроса?
|
|||
12
Buster007
08.06.12
✎
14:49
|
а тебе не кажется что
ИЗ ВТЗаказПоКоличествуКассет КАК ВТПоКолВуКассет И ГДЕ НЕ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка В (ВЫБРАТЬ ВТБ.Заказ ИЗ ВТЗаказПоКоличествуКассет КАК ВТБ)) это херня какая-то? |
|||
13
zinch
08.06.12
✎
14:54
|
А что в ВТЗаказПоКоличествуКассет попадает?
|
|||
14
amadeus2010
08.06.12
✎
14:59
|
ВТЗаказПоКоличествуКассет в него должно попасть данные из 2 запросов с проверкой на условие меньше 5
|
|||
15
zinch
08.06.12
✎
15:01
|
А если так?
ГДЕ ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток МЕЖДУ 0 И 5 |
|||
16
ssh2006
08.06.12
✎
15:07
|
(14) в логике у тебя ошибка. Делаешь Левое соединение к таблице ВТЗаказПоКоличествуКассет КАК ВТПоКолВуКассет и на соединяемую таблицу накладываешь условие
ГДЕ НЕ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка В (ВЫБРАТЬ ВТБ.Заказ ИЗ ВТЗаказПоКоличествуКассет КАК ВТБ)) Соединение получается внутренним и в итоге получается что из первой таблицы нужно выбрать те записи, которых одновременно нет в этой же таблице нет. Поэтому и пусто |
|||
17
hhhh
08.06.12
✎
15:08
|
(14) чего вы паритесь уже четвертый месяц? Сделайте в заказе реквизит КоличествоВЗаказеМеньше5Единиц. А в запросе напишите
ГДЕ ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток > 0 И РаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка.КоличествоВЗаказеМеньше5Единиц = ЛОЖЬ и ПРОФИТ. |
|||
18
amadeus2010
08.06.12
✎
15:12
|
(16)как можно исправить эту ошибку
/////////////////////////////////////////////////////////////////// ГДЕ ТоварыКРаспределениюПоРейсамОстатки.КоличествоОстаток > 0 И (НЕ ТоварыКРаспределениюПоРейсамОстатки.ЗаказПокупателя.Ссылка В (ВЫБРАТЬ ВТЗаказПоКоличествуКассет.Заказ ИЗ ВТЗаказПоКоличествуКассет)) ////////////////////////////////////////////////////////////////////////// |
|||
19
amadeus2010
08.06.12
✎
15:22
|
я имею ввиду про соединения
|
|||
20
amadeus2010
08.06.12
✎
15:36
|
есть кто-нибудь?
|
|||
21
ssh2006
08.06.12
✎
15:37
|
(19) перепиши свой запрос, что еще сказать. Как исправить запрос "выбрать 1 где 1 <> 1" ?
|
|||
22
amadeus2010
08.06.12
✎
15:51
|
понимаю что если запрос не работает то его надо исправить, не подскажите в каком направлении идти?
|
|||
23
amadeus2010
08.06.12
✎
16:24
|
О кей, забудем про то что написано выше и рассмотрим вопрос по-другому. Есть ВТЗаказ в которой сидят заказ1 и заказ2. Есть второй запрос выводящий список определенных заказов к примеру
выбрать заказпокупателя.ссылка из документы.заказпокупателя как заказ покупателя Как этот запрос изменить так чтобы в него не попадали заказы из ВТЗаказ? |
|||
24
amadeus2010
09.06.12
✎
08:02
|
О кей, забудем про то что написано выше и рассмотрим вопрос по-другому. Есть ВТЗаказ в которой сидят заказ1 и заказ2. Есть второй запрос выводящий список определенных заказов к примеру
выбрать заказпокупателя.ссылка из документы.заказпокупателя как заказ покупателя Как этот запрос изменить так чтобы в него не попадали заказы из ВТЗаказ? |
|||
25
Cube
09.06.12
✎
08:05
|
||||
26
amadeus2010
09.06.12
✎
09:11
|
Доброе утро касаясь темы запроса.Сегодня утром проверил его на другой базе подключенной к другому серверу.Запрос в том виде который я выложил работает на другой базе,но есть определенные моменты. Если в заказе количество товара принадлежащего к одной из групп ПЕТ или Шахдаг суммарно меньше 5,запрос работает,но если в заказ добавить например 20л бутыль -1шт, ПЕТ товар 1шт, Шахдаг товар-1шт, то запрос не работает,выводятся только названия колонок. Получается что запрос может сравнивать только те группы которые указаны в условии отбора в верхней части запроса. А как можно обойти эту ситуацию чтобы он сравнивал все товары в заказе и отсекал те где количество меньше 5 и оставлял в заказе те строки которые не принадлежат к ПЕТ или Шахдаг?
|
|||
27
amadeus2010
09.06.12
✎
10:53
|
есть какие-то предположения на этот счет?
|
|||
28
Buster007
09.06.12
✎
11:47
|
(27) тебе уже написали выше где в твоем запросе ошибка, что ты ещё хочешь? чтобы за тебя запрос написали?
|
|||
29
amadeus2010
09.06.12
✎
16:58
|
ошибку исправил запрос работает,всем спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |