powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Select
23 сообщений из 23, страница 1 из 1
Select
    #37691362
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица table:

Отдел Ф.И.О. Возраст
otd fio vozr

1 Иванов 26
1 Петров 22
1 Сидоров 23

По запросу select a.otd, a.fio, max(a.vozr) from table group by otd into table2 получаю результат:

Отдел Ф.И.О. Возраст
otd fio vozr
1 Сидоров 26

а нужно

Отдел Ф.И.О. Возраст
otd fio vozr
1 Иванов 26

т.е. в итоговый запрос выбирать не последнюю запись + максимальный возраст среди всех сотрудников, а ту запись целиком где возраст сотрудника максимальный.

Подскажите, что нужно поменять. Спасибо.
...
Рейтинг: 0 / 0
Select
    #37691412
Banditos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
faustgreen,

Поменять нужно логику восприятия.

Код: sql
1.
SELECT * FROM table WHERE vozr = (SELECT MAX(vozr) FROM table) INTO TABLE table2
...
Рейтинг: 0 / 0
Select
    #37692130
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А версию фокса было слабО указать ? Задробили в этом форуме уже вопросы без указания версии, модератор, ты спишь ?
...
Рейтинг: 0 / 0
Select
    #37692732
Помогите уже голову сломал! VFP v.8.0

Есть три таблицы:
ten - там признак ID и FIO;
izm - там так же признак ID и сумма SUMM1;
dolg - там так же признак ID и другая сумма SUMM2

Необходимо сформировать таблицу с данными: ID, FIO, S1, S2 при чем во второй и третьей таблицы записи по ID могут быть повторяться, т.е. необходимо проссумировать SUMM1 в izm и SUMM2 в dolg по признаку ID

SELECT ten.ID, ten.FIO, SUM(izm.SUMM1) as S1, SUM(dolg.Summ2) as S2 ;
FROM ten, izm, dolg ;
INTO DBF sbor ;
WHERE izm.ID=ten.ID AND dolg.ID=ten.ID ;
GROUP BY izm.ID, dolg.ID
...
Рейтинг: 0 / 0
Select
    #37692741
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Фомин,
А вам обязательно сохранять это в файл? Курсора не достаточно будет?
А по предъявленному коду могу предположить поправить:

Код: sql
1.
2.
3.
4.
5.
SELECT q1.id, max(q1.fio) as fio, sum(q2.summ1) as s1, sum(q3.summ2) as s2
FROM         ten q1 INNER JOIN
                      q2 ON q1.id = q2.id INNER JOIN
                      q3 ON q1.id = q3.id
GROUP BY q1.id into cursor qResult



Здесь отсутствует сохранение в файл, думаю что вам оно нужно как временные данные...
...
Рейтинг: 0 / 0
Select
    #37692744
AngelOKES,

По вашему примеру я написал вот это, но результат таков что таблица sbor пустая. Где может быть ошибка?

SELECT q1.id, sum(q2.summ1) as s1, sum(q3.summ2) as s2 ;
FROM q1 ;
INNER JOIN q2 ON q1.id = q2.id ;
INNER JOIN q3 ON q1.id = q3.id ;
GROUP BY q1.id ;
INTO DBF sbor
...
Рейтинг: 0 / 0
Select
    #37692751
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Фомин,

А сам запрос что-нибудь возвращает?
...
Рейтинг: 0 / 0
Select
    #37692757
AngelOKES,

Как я понимаю Вы интересуетесь создается ли таблица SBOR, то я могу сказать что она создается с нужными полями но пустая!
...
Рейтинг: 0 / 0
Select
    #37692765
AngelOKES,

Пример:
таблица Q1 таблица Q2 таблица Q3
ID ID Summ1 ID Summ2
1 1 10.25 2 10.25
2 2 25.63 3 25.65
3 2 13.00 3 -65.95
4 2 -63.25
5

Мне надо что бы вышел такой результат:
таблица SBOR
ID S1 S2
1 10.25 0.00
2 -24.62 10.25
3 0.00 -40.30
4 0.00 0.00
5 0.00 0.00
...
Рейтинг: 0 / 0
Select
    #37692767
Валерий Фомин,

Извините! Не посмотрел предварительный просмотр! Не верно отобразился пример!
...
Рейтинг: 0 / 0
Select
    #37692771
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Фомин,

Я сейчас попробовал создал эти три таблицы и сделал запрос:

Код: sql
1.
2.
3.
Select q1.Id, Max(q1.fio) As fio, Sum(q2.summ1) As s1, Sum(q3.summ2) As s2 ;
	FROM ten q1 INNER Join izm q2 On q1.Id = q2.Id INNER Join dolg q3 On q1.Id = q3.Id ;
	GROUP By q1.Id Into Cursor qResult



И у меня результат 3 строки.
...
Рейтинг: 0 / 0
Select
    #37692799
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Фомин,

Ну как у вас получилось? В последнем примере я вам сделал и с фамилией тоже, суммы 2 на каждую запись, суммирует правильно.
...
Рейтинг: 0 / 0
Select
    #37692859
AngelOKES,

Мне немного не понятно параметр TEN ?

Раз Вы используете таблицы Q1, Q2, Q3 зачем там ten, izm, dolg ?
...
Рейтинг: 0 / 0
Select
    #37692896
AngelOKES,

Я бы хотел чтобы получилось вот такой результат!
...
Рейтинг: 0 / 0
Select
    #37692918
AngelOKES,

я с Вами согласен результат Вашего решения такой, но мне необходимо все FIO ?
...
Рейтинг: 0 / 0
Select
    #37692935
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Фомин,

q1, q2, q3 это псевдонимы, объявленный в запросе для упрощения обращения к полям разных таблиц.

Запрос как я вижу у вас все таки заработал, это уже хорошо.

Теперь вам необходимо чтобы выбирались все поля из таблицы ten, но вы не ставили изначально так вопрос.

Теперь попробуем подшаманить запрос, чтобы выбирать все записи из ten:


Код: sql
1.
2.
3.
4.
Select q1.Id, Max(q1.fio) As fio, Sum(Iif(Isnull(q2.summ1),000000000.00,q2.summ1)) As s1, ;
	Sum(Iif(Isnull(q3.summ2),000000000.00,q3.summ2)) As s2 ;
	FROM ten q1 Left Join izm q2 On q1.Id = q2.Id Left Join dolg q3 On q1.Id = q3.Id ;
	GROUP By q1.Id Into Cursor qResult
...
Рейтинг: 0 / 0
Select
    #37693143
AngelOKES,

команда отработала, но по таблице DOLG, а по таблице IZM умножилась на кол-во записей в таблице DOLG !!!???
...
Рейтинг: 0 / 0
Select
    #37693173
AngelOKES,

Значение SUM(Iif(Isnull(q2.summ1),000000000.00,q2.summ1)) можно заменить SUM(NVL(q2.summ1,0))
А по остальному у меня пока засада, есть конечно решение сделать это через три команды SELECT, но хотелось бы обойтись одной!
Спасибо огромное за взаимопонимание! Если у Вас будет решение данной задачи через один SELECT, то я почту за честь!
...
Рейтинг: 0 / 0
Select
    #37693301
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Фомин,

Пока что только двумя запросами, но сейчас думаю как сделать одним:

Код: sql
1.
2.
3.
4.
5.
Select ten.Id, Max(fio) As fio, Sum(Nvl(izm.summ1,0)) As s1 From ten ;
	LEFT Join izm On ten.Id=izm.Id Group By ten.Id Into Cursor q1

Select q1.Id, Max(fio) As fio, Max(s1) As s1, Sum(Nvl(dolg.summ2,0)) As s2 From q1 ;
	LEFT Join dolg On q1.Id=dolg.Id Group By q1.Id Into Cursor q1
...
Рейтинг: 0 / 0
Select
    #37693479
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот решение одним запросом:

Код: sql
1.
2.
3.
select ten.id, Nvl((select sum(summ1) as sum1 from izm where id=ten.id),0) as sum1, ;
Nvl((select sum(summ2) from dolg where id=ten.id),0) as sum2 from ten ;
group by ten.id Into Cursor qResult
...
Рейтинг: 0 / 0
Select
    #37693538
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для VFP8 это работать не будет. Подзапросы - недопустимы. Поэтому лучше сделать 3 последовательных запроса

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
* Исходные данные
Create Cursor ten (id i, fio C(10))
Insert into ten VALUES (1, 'Павлов')
Insert into ten VALUES (2, 'Фомин')
Insert into ten VALUES (3, 'Иванов')
Insert into ten VALUES (4, 'Сидоров')
Insert into ten VALUES (5, 'Петров')
Insert into ten VALUES (6, 'Путин')
Insert into ten VALUES (7, 'Дорошенко')
Insert into ten VALUES (8, 'Власов')
Insert into ten VALUES (9, 'Романов')
Insert into ten VALUES (10, 'Трошин')

Create Cursor izm (id i, summ1 N(10,2))
Insert into izm VALUES (1, 50)
Insert into izm VALUES (2, 60)
Insert into izm VALUES (2, 70)
Insert into izm VALUES (2, 80)
Insert into izm VALUES (3, 300)
Insert into izm VALUES (6, 400)
Insert into izm VALUES (7, 500)

Create Cursor dolg (id i, summ2 N(10,2))
Insert into dolg VALUES (1, 10)
Insert into dolg VALUES (1, 20)
Insert into dolg VALUES (1, 30)
Insert into dolg VALUES (3, 80)
Insert into dolg VALUES (3, 90)
Insert into dolg VALUES (8, 200)
Insert into dolg VALUES (9, 300)
Insert into dolg VALUES (10, 400)

* "Схлопывание" сумм по таблице izm
select id, sum(summ1) as summ1 ;
into cursor sum_izm nofilter ;
from izm ;
group by id

* "Схлопывание" сумм по таблице dolg
select id, sum(summ2) as summ2 ;
into cursor sum_dolg nofilter ;
from dolg ;
group by id

* Объединение результатов
select ten.id, ten.fio, nvl(sum_izm.summ1,000000.00) as summ1, nvl(sum_dolg.summ2,000000.00) as summ2 ;
from ten ;
left join sum_izm on ten.id = sum_izm.id ;
left join sum_dolg on ten.id = sum_dolg.id 



Для VFP9 можно и одним запросом с подзапросами. Например, так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Select ;
    ten.id, ;
    ten.fio, ;
    Sum(nvl(tmp.summ1, Cast(0 as N(10,2)))) as summ1, ;
    Sum(nvl(tmp.summ2,Cast(0 as N(10,2)))) as summ2 ;
from ten ;
left join (;
    Select id, summ1, Cast(0 as N(10,2)) as summ2 from izm ;
    union all ;
    Select id, Cast(0 as N(10,2)) as summ1, summ2 from dolg ;
    ) as tmp on ten.id = tmp.id ;
group by ten.id, ten.fio
...
Рейтинг: 0 / 0
Select
    #37693557
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,

Да я думаю это самый полный ответ, я тоже хотел сделать с UNION, но забыл как обратиться к подзапросу, теперь вспомнил что ему надо было дать имя, как вы например tmp.
Спасибо, теперь я вспомнил как это делается :)
Но все таки если это делается для VFP9.0, то можно использовать и мой вариант :)
...
Рейтинг: 0 / 0
Select
    #37694617
Спасибо ВладимирМ и AngelOKES за полный ответ на мой вопрос.
Я первый раз на этом форуме и меня порадовало что мимо моей проблемы люди не проходят мимо.
Еще раз большое спасибо.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Select
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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