Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) v7: Прямой запрос. Условие (число прочтений - 7116 )
EasyRider
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 30. Ноября 2010
v7: Прямой запрос. Условие
09. Октября 2012 :: 02:22
Печать  
   |SELECT
   |  Спр.PARENTEXT as [Продукция $Справочник.Продукция]
   |FROM
   |  $Справочник.Движение as Спр
   |WHERE
   |  $Спр.ДатаОперации BETWEEN :НачДата~~ AND :КонДата~~
   |  AND $Спр.Операция IN (SELECT Val FROM "+Операция_1+")
   |  AND $Спр.Операция NOT IN (SELECT Val FROM "+Операция_2+")
   |  AND Спр.ISMARK=$ПустойИД
   |GROUP BY
   |  Спр.PARENTEXT";

Доброго времени суток.
Недавно работаю с прямыми запросами.
Задача: по подчиненному справочнику "ТехнологическиеОперации" выбрать элементы содержащие операцию1,операцию2...операциюN и не содержащие операцию1,операцию2...операциюN (операции в списке значений (с пометками),выбираемые пользователем).
С помощью метода "УложитьСписокОбъектов" запрос работает с условием: "ИЛИ","ИЛИ".
Подскажите как заставить работать запрос с условием: "И","И" ??

База=ДБФ. Провайдер=VFPOLEDB
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: v7: Прямой запрос. Условие
Ответ #1 - 09. Октября 2012 :: 03:15
Печать  
А какой тип у Справочник.Движение.Операция?
  
Наверх
IP записан
 
EasyRider
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 30. Ноября 2010
Re: v7: Прямой запрос. Условие
Ответ #2 - 09. Октября 2012 :: 04:13
Печать  
leshik писал(а) 09. Октября 2012 :: 03:15:
А какой тип у Справочник.Движение.Операция?


Справочник.ТехнологическиеОперации
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: v7: Прямой запрос. Условие
Ответ #3 - 09. Октября 2012 :: 04:33
Печать  
Вроде в (0) все правильно, а что не так?
  
Наверх
ICQ  
IP записан
 
EasyRider
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 30. Ноября 2010
Re: v7: Прямой запрос. Условие
Ответ #4 - 09. Октября 2012 :: 04:40
Печать  
Salimbek писал(а) 09. Октября 2012 :: 04:33:
Вроде в (0) все правильно, а что не так?


запрос работает,НО в выборку попадают элементы, которые равны одной из множества операций в СЗ. Нужно чтобы попадали только элементы, которые равны всем операциям в СЗ

Реле 1Н Спр.Номенклатура
     200123456789 Спр.Продукция
        Контрольная  Спр.Движение(Операция)
        Передача на склад Спр.Движение(Операция)
        Отгрузка Спр.Движение(Операция)

Выбрать элементы Спр.Продукция которые, равны выбранным пользователем операциям

Выбрать элементы Спр.Продукция, для которого в подчиненном ему Спр.Движение существуют операции из СпискаЗначений1 и не существуют операции из СпискаЗначений2

Обсуждали здесь:
http://www.forum.mista.ru/topic.php?id=633070
  
Наверх
 
IP записан
 
val
Full Member
***
Отсутствует


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: v7: Прямой запрос. Условие
Ответ #5 - 09. Октября 2012 :: 08:05
Печать  
(0) Первым подзапросом выбирает DISINCT пары Спр.PARENTEXT и $Спр.Операция с теми условиями, которые у Вас уже есть в Вашем запросе.
Вторым запросом выбираете из первого Спр.PARENTEXT, COUNT(*) с условием COUNT(*)= числу элементов в Операция_1.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: v7: Прямой запрос. Условие
Ответ #6 - 10. Октября 2012 :: 02:31
Печать  
EasyRider писал(а) 09. Октября 2012 :: 02:22:
   |SELECT
   |  Спр.PARENTEXT as [Продукция $Справочник.Продукция]
   |FROM
   |  $Справочник.Движение as Спр
   |WHERE
   |  $Спр.ДатаОперации BETWEEN :НачДата~~ AND :КонДата~~
   |  AND $Спр.Операция IN (SELECT Val FROM "+Операция_1+")
   |  AND $Спр.Операция NOT IN (SELECT Val FROM "+Операция_2+")
   |  AND Спр.ISMARK=$ПустойИД
   |GROUP BY
   |  Спр.PARENTEXT";

Доброго времени суток.
Недавно работаю с прямыми запросами.
Задача: по подчиненному справочнику "ТехнологическиеОперации" выбрать элементы содержащие операцию1,операцию2...операциюN и не содержащие операцию1,операцию2...операциюN (операции в списке значений (с пометками),выбираемые пользователем).
С помощью метода "УложитьСписокОбъектов" запрос работает с условием: "ИЛИ","ИЛИ".
Подскажите как заставить работать запрос с условием: "И","И" ??

База=ДБФ. Провайдер=VFPOLEDB

Что такое Операция_1 и Операция_2?
Если это имена временных таблиц, в которые выгружены списки значений, то все будет работать после исправления условия по ISMARK, т.к. там возможон всего 2 варианта: '*' и '', но никак не строка из 9 сиволов с нулем почти в конце (ПустойИД).
И я не уверен, что фокс правильно отрабатывает условие AND field NOT IN () ... попробуй поменять на AND NOT(field IN()).
  
Наверх
 
IP записан
 
EasyRider
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 30. Ноября 2010
Re: v7: Прямой запрос. Условие
Ответ #7 - 10. Октября 2012 :: 03:54
Печать  
Dmitry The Wing
Запрос не отбирает помеченные на удаление как с ПустойИД, так и с ' '

val
не могу понять, где ставить условие COUNT(*)= числу элементов в Операция_1?

Если так, то условие не срабатывает
   |SELECT
   |   Запрос_1.PARENTEXT as [Продукция $Справочник.Продукция],
   |   COUNT(*)=:КоличествоОпераций as Количество
   |FROM
   |(SELECT DISTINCT
   |  Спр.PARENTEXT,
   |  $Спр.Операция
   |FROM
   |  $Справочник.Движение as Спр
   |WHERE
   |  $Спр.ДатаОперации BETWEEN :НачДата~~ AND :КонДата~~
   |  AND $Спр.Операция IN (SELECT Val FROM "+Операция_1+")
     //|  AND NOT ($Спр.Операция IN (SELECT Val FROM "+Операция_2+"))
   |  AND Спр.ISMARK=' '
   |) Запрос_1
   |GROUP BY
   |  Запрос_1.PARENTEXT";
  
Наверх
 
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: v7: Прямой запрос. Условие
Ответ #8 - 10. Октября 2012 :: 09:23
Печать  
EasyRider писал(а) 10. Октября 2012 :: 03:54:
не могу понять, где ставить условие COUNT(*)= числу элементов в Операция_1?

Почитай про HAVING http://msdn.microsoft.com/ru-ru/library/ms180199(v=sql.100).aspx
  
Наверх
GTalkICQ  
IP записан
 
EasyRider
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 30. Ноября 2010
Re: v7: Прямой запрос. Условие
Ответ #9 - 10. Октября 2012 :: 10:33
Печать  
Спасибо всем откликнувшимся....
Добился правильной отработки запроса на вхождение операций:

   |SELECT
   |   Запрос_1.PARENTEXT as [Продукция $Справочник.Продукция],
   |   COUNT(*) as Количество
   |FROM
   |(SELECT DISTINCT
   |  Спр.PARENTEXT,
   |  $Спр.Операция
   |FROM
   |  $Справочник.Движение as Спр
   |WHERE
   |  $Спр.ДатаОперации BETWEEN :НачДата~~ AND :КонДата~~
   |  AND $Спр.Операция IN (SELECT Val FROM "+Операция_1+")
   |  AND Спр.ISMARK=' '
   |) Запрос_1
   |GROUP BY
   |  Запрос_1.PARENTEXT
   |HAVING
   |  COUNT(*)=:КоличествоОпераций_Вхождение";

Теперь нужно, чтобы работал на "вхождение - не вхождение"
Так отрабатывает не корректно:

   |SELECT
   |   Запрос_1.PARENTEXT as [Продукция $Справочник.Продукция],
   |   COUNT(*) as Количество
   |FROM
   |(SELECT DISTINCT
   |  Спр.PARENTEXT,
   |  $Спр.Операция
   |FROM
   |  $Справочник.Движение as Спр
   |WHERE
   |  $Спр.ДатаОперации BETWEEN :НачДата~~ AND :КонДата~~
   |  AND $Спр.Операция IN (SELECT Val FROM "+Операция_1+")
   |  AND $Спр.Операция NOT IN (SELECT Val FROM "+Операция_2+")
   |  AND Спр.ISMARK=' '
   |) Запрос_1
   |GROUP BY
   |  Запрос_1.PARENTEXT
   |HAVING
   |  COUNT(*)=:КоличествоОпераций_Вхождение";

Помогите советом Улыбка
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: v7: Прямой запрос. Условие
Ответ #10 - 11. Октября 2012 :: 02:23
Печать  
EasyRider писал(а) 10. Октября 2012 :: 10:33:
Помогите советом Улыбка
Так ты же их игнорируешь:
Dmitry The Wing писал(а) 10. Октября 2012 :: 02:31:
И я не уверен, что фокс правильно отрабатывает условие AND field NOT IN () ... попробуй поменять на AND NOT(field IN()).
  
Наверх
 
IP записан
 
EasyRider
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 30. Ноября 2010
Re: v7: Прямой запрос. Условие
Ответ #11 - 11. Октября 2012 :: 03:49
Печать  
Dmitry The Wing писал(а) 11. Октября 2012 :: 02:23:
EasyRider писал(а) 10. Октября 2012 :: 10:33:
Помогите советом Улыбка
Так ты же их игнорируешь:
Dmitry The Wing писал(а) 10. Октября 2012 :: 02:31:
И я не уверен, что фокс правильно отрабатывает условие AND field NOT IN () ... попробуй поменять на AND NOT(field IN()).


Доброе утро. Пробовал по твоему - запрос срабатывает, но отбор идет неверно
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: v7: Прямой запрос. Условие
Ответ #12 - 11. Октября 2012 :: 06:05
Печать  
Проверь списки. Судя по коду, все должно работать...
  
Наверх
 
IP записан
 
EasyRider
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 30. Ноября 2010
Re: v7: Прямой запрос. Условие
Ответ #13 - 11. Октября 2012 :: 07:53
Печать  
Dmitry The Wing писал(а) 11. Октября 2012 :: 06:05:
Проверь списки. Судя по коду, все должно работать...


Запрос для трех операций

Таб=Запрос.ВыполнитьИнструкцию("SELECT Val FROM "+Операция_2);

Отладка
SELECT Val FROM ea06c354-edd9-45c4-a1e9-746695607163
     C   
    83   
   15R   

СЗ заполняется правильно. УложитьСписокОбъектов срабатывает.
Что еще нужно посмотреть?
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: v7: Прямой запрос. Условие
Ответ #14 - 11. Октября 2012 :: 08:27
Печать  
Кхм... может туплю, но как значение ОДНОВРЕМЕННО может быть в списке и не быть в нем?
У тебя стоит AND
____

сорри, невнимательно читал Улыбка

update:
на SQL работает правильно
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать