Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с запросом / 11 сообщений из 11, страница 1 из 1
30.01.2008, 13:18
    #35097350
GBD
GBD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Помогите, пжлст. Необходимо в VFP 5.0 создать запрос, в котором для выбраных записей происходит сравнение значения некоторой ячейки с значением ячейки в другой таблицы (таблицы связаны между собой).
Примерно:выбрать записи из таблицы 1, где поле предприятие =х и где значение уровня превышает значение КР1 в таблице 2 (в таблице 2 предприятие=х)
Есть 179 предприятий, необходима проверка всех одним запросом (или последовательностью запросов).
В рнр я бы загнал это в цикл, а с VFP еще серьезно не сталкивался.
Подскажите оператор или функцию.
Отозвавшимся огромная благодарность.
...
Рейтинг: 0 / 0
30.01.2008, 13:39
    #35097461
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Хм, операторами сравнения являются, как и во многих других языках, "=", "<",">" и их комбинации.
Скелет запроса примерно такой:
Код: plaintext
1.
2.
3.
select нужные_поля 
from table1  t1 
inner join table2 t2 on t1.предприятие=t2.предприятие 
where предприятие=x and t1.значение_уровня > t2.КР1
...
Рейтинг: 0 / 0
30.01.2008, 14:02
    #35097544
GBD
GBD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Sergey Sizov.Хм, операторами сравнения являются, как и во многих других языках, "=", "<",">" и их комбинации.
Скелет запроса примерно такой:
Код: plaintext
1.
2.
3.
select нужные_поля 
from table1  t1 
inner join table2 t2 on t1.предприятие=t2.предприятие 
where предприятие=x and t1.значение_уровня > t2.КР1


здесь х-имеется ввиду переменная (их 179), а нужно перебрать все.
...
Рейтинг: 0 / 0
30.01.2008, 14:05
    #35097558
GBD
GBD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Для одного предприятия вопросов нет. Для всего списка предприятий?
Спсб
...
Рейтинг: 0 / 0
30.01.2008, 14:37
    #35097704
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
А это надо было отгадать? Это нельзя было сразу написать? А сомому чуть-чуть подумать и убрать условие предприятие=x трудно?
...
Рейтинг: 0 / 0
30.01.2008, 15:49
    #35097994
GBD
GBD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Sergey Sizov.А это надо было отгадать? Это нельзя было сразу написать? А сомому чуть-чуть подумать и убрать условие предприятие=x трудно?

Я же вроде писал...?
Есть 179 предприятий, необходима проверка всех одним запросом (или последовательностью запросов).
Извините, что изложил в непонятном для вас формате.
А насчет удаления условия предприятие=х, так я пробовал в разных вариантах сравнивать значение уровня из таблицы 1 с полем КР1 в таблице 2.
...
Рейтинг: 0 / 0
30.01.2008, 16:43
    #35098195
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
И как это пробовалось? А на каких данных? И какой был результат? А какой должен быть? Это тоже мы сами должны отгадывать?
...
Рейтинг: 0 / 0
30.01.2008, 18:50
    #35098664
GBD
GBD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Sergey SizovИ как это пробовалось? А на каких данных? И какой был результат? А какой должен быть? Это тоже мы сами должны отгадывать?

Чтобы не быть голословным, предлагаю посмотреть скрипт.

SELECT ALLTRIM(Person.f)+" "+LEFT(Person.i,1)+"."+LEFT(Person.o,1)+"." AS fio,;
ALLTRIM(Person.pasport_s)+" "+ALLTRIM(Person.pasport_n) AS pasport,;
Person.sex, Person.birth_year, SUM(Dose.dose) AS dose,;
MIN(Dose.date_start) AS date_start,;
MAX(Dose.date_finish) AS date_finish, Worker_attribute.subgroup,;
Workplace.name, Dose.plant_id, Worker_attribute.subdiv_id,;
Workplace.subdivision, Workplace.kr_1, Workplace.kr_2,;
Dose.datetime_insert;
FROM arsidc!worker_attribute INNER JOIN arsidc!person;
INNER JOIN arsidc!dose;
INNER JOIN arsidc!workplace ;
ON Dose.plant_id = Workplace.wrkpl_id ;
ON Person.person_id = Dose.person_id ;
ON Worker_attribute.person_id = Person.person_id;
WHERE Dose.category_id = 3;
AND Dose.date_start >= {01/01/2008};
AND Dose.dose >= Workplace.kr_1;
GROUP BY Dose.person_id;
ORDER BY Worker_attribute.subgroup, 1
Выдается ошибка operator/operand type mismatch
без строки AND Dose.dose >= Workplace.kr_1; работает, выдает все значения.
ожидаемый результат-список позиций, где Dose.dose >= Workplace.kr_1
...
Рейтинг: 0 / 0
30.01.2008, 19:44
    #35098786
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Ну так черным же по-анлийски написано:
operator/operand type mismatch
Если трудности с анлийским, то данная фраза переводится как несоответствие типов данных.
Раз это ругается на Dose.dose >= Workplace.kr_1 то потрудитесь сравнить типы данных в срвниваемых полях и привести их к какому-то одному типу.
...
Рейтинг: 0 / 0
31.01.2008, 09:03
    #35099297
GBD
GBD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Трудностей с английским нет. Причиной всему избирательность моего внимания-выхватил слово оператор-и мучаюсь. Впредь буду внимателльнее. Выставил аналогичный тип в поле КР_1-все получилось. Благодарю за помощь!
...
Рейтинг: 0 / 0
31.01.2008, 09:06
    #35099299
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
"GBD" <nospam@sql.ru>; сообщил/сообщила в новостях следующее:
news:5223713@sql.ru...
> Автор: GBD
> Sergey Sizov
> И как это пробовалось? А на каких данных? И какой был
> результат? А какой должен быть? Это тоже мы сами должны отгадывать?
>
>
> Чтобы не быть голословным, предлагаю посмотреть скрипт.
>
> SELECT ALLTRIM(Person.f)+"
> "+LEFT(Person.i,1)+"."+LEFT(Person.o,1)+"." AS fio,;

Все строки подобные :ALLTRIM(Person.f)+"
"+LEFT(Person.i,1)+"."+LEFT(Person.o,1)+"." AS fio

Заменить на Padr(ALLTRIM(Person.f)+"
"+LEFT(Person.i,1)+"."+LEFT(Person.o,1)+"." , XXX ) AS fio

где XXX - длинна строи на выходе. Можно задать константой, можно просчитать
как len(Person.f)+len(Person.i)+len(Person.o)+3 . № - это твои
пробелы/точки.

В противном случае длинна строки будет равна длинне первой выбранной строки.
Она может быть короче последующих!!!

> Выдается ошибка operator/operand type mismatch
> без строки AND Dose.dose >= Workplace.kr_1; работает, выдает все
> значения.


Ну так и приведи типы к одному.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с запросом / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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