powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ошибка при повторном использовании DISTINCT
13 сообщений из 13, страница 1 из 1
Ошибка при повторном использовании DISTINCT
    #37598342
Ignatovf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется запрос к DBF таблицам СУБД FOXPRO в котором необходимо посчитать суммы различных значений.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT Priem.kod_doc,;
  TRIM(S_wrach.fam)+"  "+TRIM(S_wrach.nam)+"  "+TRIM(S_wrach.oth) AS fiodoc,;
  SUM(IIF((Priem.kod_typpr="_2UO0YQDK7".OR.Priem.kod_typpr="_2UO0YQDK8"),1,0)) AS vsego_cz,;
  SUM(IIF(Priem.kod_typpr="_2UO0YQDK7",1,0)) AS pervich,;
  SUM(IIF(Priem.kod_typpr="_2UO0YQDK8",1,0)) AS povtor,;
  SUM(IIF(Priem.kod_typpr="_2G80Z1JZG",1,0)) AS vsego_s,;
  SUM(IIF(Lesson.kod_lesson="_2G811B53O",1,0)) AS ind_zan,;
  SUM(IIF(Lesson.kod_lesson="_2G811B53P",1,0)) AS mas_zan,;
  COUNT(DISTINCT CAST(IIF(Priem.kod_typpr="_2G80Z1JZG",.NULL.,Priem.kod) AS C(10))) AS fizl,;
  COUNT(CAST(IIF(Lesson.kod_lesson="_2G811B53P",.NULL.,Priem.kod) AS C(10))) AS fiz_mas,;
  COUNT(CAST(IIF(Lesson.kod_lesson="_2G811B53O",.NULL.,Priem.kod) AS C(10))) AS fiz_ind,;
  COUNT(*) AS vsego;
 FROM ;
     priem ;
    LEFT OUTER JOIN s_wrach ;
   ON  Priem.kod_doc = S_wrach.kod_doc ;
    LEFT OUTER JOIN lesson ;
   ON  Priem.nz_lesson = Lesson.nz_lesson;
 WHERE  S_wrach.kod_plk = ( "_2UC0T067J" );
   AND  Priem.kod_typpr IN ("_2UO0YQDK7","_2UO0YQDK8","_2G80Z1JZG");
 GROUP BY Priem.kod_doc, 2



Текст переведенного запроса рабочий. Проблема возникает при попытки попытки использовать DISTINCT больше одного раза.
Если я пишу
...
Код: vbnet
1.
2.
3.
COUNT(DISTINCT CAST(IIF(Priem.kod_typpr="_2G80Z1JZG",.NULL.,Priem.kod) AS C(10))) AS fizl,;
  COUNT(DISTINCT  CAST(IIF(Lesson.kod_lesson="_2G811B53P",.NULL.,Priem.kod) AS C(10))) AS fiz_mas,;
  COUNT(DISTINCT  CAST(IIF(Lesson.kod_lesson="_2G811B53O",.NULL.,Priem.kod) AS C(10))) AS fiz_ind,;


...
выдается ошибка (DISTINCT is invalid)
Не пойму в чем причина. Или я ошибаюсь или это особенность СУБД FOXPRO
В любом случае мне нужно посчитать лишь не повторяющиеся значения.
...
Рейтинг: 0 / 0
Ошибка при повторном использовании DISTINCT
    #37598361
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это ограничения фокса, в одном запросе он выполняет только один count(distinct ...)
...
Рейтинг: 0 / 0
Ошибка при повторном использовании DISTINCT
    #37598369
Ignatovf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите тогда наиболее оптимальную стратегию как получит в одной таблице несколько COUNT(DISTINCT...).
Ситуация такая. Пишется (дописывается) приложение на DELPHI 7. Обращение к DBF(фоксовским) таблицам осуществляется через ADO компоненты. (TADOQuery) через поставщик OLE DB Provider for Visual FoxPro.
...
Рейтинг: 0 / 0
Ошибка при повторном использовании DISTINCT
    #37598371
Ignatovf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока видится получить нужные значения в разных запросах а затем их соединить.
...
Рейтинг: 0 / 0
Ошибка при повторном использовании DISTINCT
    #37598372
Ignatovf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или получить данные без группировки а затем навигационным способом бегать по таблице и считать что нужно.
...
Рейтинг: 0 / 0
Ошибка при повторном использовании DISTINCT
    #37598391
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgnatovfПока видится получить нужные значения в разных запросах а затем их соединить.
Этот способ самый простой и надежный.

IgnatovfИли получить данные без группировки а затем навигационным способом бегать по таблице и считать что нужно.
Возможно так будет быстрее, но тут все зависит от реализации, надо пробовать и мерить время.
...
Рейтинг: 0 / 0
Ошибка при повторном использовании DISTINCT
    #37598396
Ignatovf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какие еще способы здесь могут быть?
...
Рейтинг: 0 / 0
Ошибка при повторном использовании DISTINCT
    #37598406
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgnatovfКакие еще способы здесь могут быть?
На фоксе я бы сначала все исходные данные затянул в курсор, а потом из него делал выборки с группировкой. У ODBC-драйвера возможностей поменьше, не разу с ним не работал. Если он может с курсорами работать, то попробуй.
...
Рейтинг: 0 / 0
Ошибка при повторном использовании DISTINCT
    #37598414
Ignatovf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T На фоксе я бы сначала все исходные данные затянул в курсор, а потом из него делал выборки с группировкой. У ODBC-драйвера возможностей поменьше, не разу с ним не работал. Если он может с курсорами работать, то попробуй.
Чет я торможу что значит "Затянуть в курсор" впрочем как и "курсор" в данном контексте. Пойду искать инфу по теме. Буду благодарен если дадите ссылку или покажите пример.
Все равно спасибо за указание направления!
...
Рейтинг: 0 / 0
Ошибка при повторном использовании DISTINCT
    #37598418
Ignatovf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В смысле засунуть данные во временную таблицу и оттуда тегать разными запросами COUNT(Distinct)по разным значениям. Тогда как потом их свести в одну таблицу?
...
Рейтинг: 0 / 0
Ошибка при повторном использовании DISTINCT
    #37598569
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курсор - временная таблица.

Засунуть в одну как-то так:
Код: sql
1.
2.
3.
select A.Key, A.Dist1, B.Dist2 from (select Key, count(distinct F1) as Dist1 from MyCursor Group by Key) A;
    join (select Key, count(distinct F2) as Dist2 from MyCursor Group by Key) B on A.Key = B.Key;
    ....



Можно также без курсора сразу из исходных таблиц, но будет гораздо медленнее.
...
Рейтинг: 0 / 0
Ошибка при повторном использовании DISTINCT
    #37598637
Ignatovf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо мысль понятна. Примерно так себе и представлял.
Копаюсь с реализацией. В голове и на экране каша. Буду расхлебывать. Надеюсь все получится. Опасаюсь как бы не было переполнений таблица содержит больше 4,7 миллиона записей плюс к ней несколько поменьше join ить надо. Буду делать через курсор так нагляднее и быстрее работать должно. Во общем куча мыслей.......
Спасибо за помощь!
...
Рейтинг: 0 / 0
Ошибка при повторном использовании DISTINCT
    #37598642
Ignatovf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще с наступающим НОВЫМ ГОДОМ!!!!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ошибка при повторном использовании DISTINCT
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]