Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: select в foxpro 2.6 DOS  (Прочитано 9000 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Shtan
Читатель

ua
Offline Offline

« : 15-02-2014 13:54 » 

Подскажите, пожалуйста, как можно более эффективно использовать команду select (SQL) в foxpro 2.6 DOS   
Задача следующая: есть таблица в которой есть поле gk - Гигакалории и поле pu  (если pu=.t. то Гигакалории (gk) сняты с показаний прибора учета, если pu=.f. то Гигакалории (gk) без прибора)
Нужно в одной таблице показать в разных полях gk по прибору учета и gk без прибора учета для одного и того же поля period и  kodnp
Мой программный код с поставленной задачей справляется, но мне кажеться, что существует способ сделать то же  самое в одной комманде. кто-нибудь может дать совет?   

Код:
select period,kodnp,00000.000 as gkpu, sum(gk) as gkbezpu from proba where pu=.f. group by period,kodnp into table tab1
select period,kodnp, sum(gk) as gkpu from proba where pu=.t. group by period,kodnp into table tab2
select tab1
append from tab2
select period,kodnp,sum(gkbezpu) as gkbezpu,sum(gkpu) as gkpu from tab1 group by period,kodnp into table tabpu
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 15-02-2014 14:50 » 

На твоё счастье я настолько некрофил, что у меня даже где-то есть DOS и FoxPro 2.6. Сейчас посмотрим...
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 15-02-2014 16:38 » 

Ну поскольку подзапросы кроме IN и EXISTS отсутствуют, равно как выражения вида SUM(DISTINCT ...), единственный способ впихнуть всё это в единый запрос - это соединять таблицу с самой собой и выполнять некие математические манипуляции с агрегирующими функциями над через разные всякие разложения, возможно условные.

Подумаю. Быстро не обещаю.
« Последнее редактирование: 15-02-2014 16:40 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 16-02-2014 11:46 » 

Так эта, всё ж элементарно... Если на свежую голову думать:
Код: (SQL)
SELECT ;
  period, ;
  kodnp, ;
  SUM(IIF(pu, gk, 0)) AS truegk, ;
  SUM(IIF(pu, 0, gk)) AS falsegk ;
FROM proba ;
GROUP BY period, kodnp
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Shtan
Читатель

ua
Offline Offline

« Ответ #4 : 16-02-2014 22:29 » new

Спасибо, большое! Действительно элементарно!  Улыбаюсь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines