Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / SELECT в SELECT'е / 3 сообщений из 3, страница 1 из 1
20.04.2020, 21:46
    #39949112
MrAdgor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT в SELECT'е
Здравствуйте. Имеем БД с информацией о перевозках. Не могу понять как организовать SELECT в SELECT'е. При помощи SUM нужно подсчитать сколько уже есть рейсов у водителя, из этого складываются %. Мне нужно, что бы подсчитывалось кол-во рейсов для каждого водителя отдельно, но не могу понять как это сделать.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT one.id_vodit as "ID водителя", fam as "Фамилия", voditel.name as "Имя", oth as "Отчество", date_in as "Дата отъезда", 
date_out as "Дата прибытия", moves.money + work.money + (work.money * (((sthaj/12)*10) + SUM(
	SELECT * 
	FROM work, voditel two 
	WHERE id_vodit = id_vod
        AND ID_ВНЕШН = ID_ВНУТР)))	
FROM moves, reis, voditel one, work
WHERE moves.id_move = reis.id_move
AND reis.id_reis = work.id_reis
AND id_vodit = id_vod
AND moves.id_move = 10



Нашёл информацию про cross apply, но не могу сообразить, как её встроить, и подходит ли она для этого случая.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select one.id
from table_1 one
cross apply( -- outer apply(
  select id
  from table_2 two
  where two.id=one.id
  )
group by one.id



Очень надеюсь на совет, потому что с запросом в запросе сталкиваюсь впервые, и факт того, что нужно информацию из первого запроса передать во второй плавит мозг. Приложил скриншот с таблицами из БД.
...
Рейтинг: 0 / 0
21.04.2020, 11:26
    #39949250
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT в SELECT'е
Попробуйте
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT one.id_vodit as "ID водителя", fam as "Фамилия", voditel.name as "Имя", oth as "Отчество", date_in as "Дата отъезда", 
date_out as "Дата прибытия"
, moves.money + work.money + (work.money * (((sthaj/12)*10) + (SELECT count( id_work )
	FROM work c_work WHERE c_work.id_vod = one.id_vodit )))	

FROM moves, reis, voditel one, work
WHERE moves.id_move = reis.id_move
AND reis.id_reis = work.id_reis
AND id_vodit = id_vod
AND moves.id_move = 10
...
Рейтинг: 0 / 0
21.04.2020, 16:18
    #39949439
MrAdgor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT в SELECT'е
Guzya, получилось и работает, спасибо!
Разве что теперь нужно использовать вместо voditel ссылку one для других полей тоже, выделил восклицательными знаками. Большое спасибо!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT one.id_vodit as "ID водителя", fam as "Фамилия", !!!one!!!.name as "Имя", oth as "Отчество", date_in as "Дата отъезда", 
date_out as "Дата прибытия"
, moves.money + work.money + (work.money * (((sthaj/12)*10) + (
	SELECT count( id_work )
	FROM work c_work 
	WHERE c_work.id_vod = one.id_vodit )))	
FROM moves, reis, voditel one, work
WHERE moves.id_move = reis.id_move
AND reis.id_reis = work.id_reis
AND id_vodit = id_vod
AND moves.id_move = 10
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / SELECT в SELECT'е / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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