Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
3 / 3 / 2
Регистрация: 14.03.2013
Сообщений: 150
1

Написать функцию, которая бы пробегала по всем записям одной таблицы и заносила бы их id в запрос на место Х

23.04.2015, 13:21. Показов 898. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Помогите написать функцию, которая бы пробегала по всем записям одной таблицы и заносила бы их id в запрос на место Х, и по записям второй таблицы и заносила бы их id на место Y:
SQL
1
SELECT SUM(vvalue) FROM t_units WHERE ntypeid=Y AND vinout='OUTGOING' AND nnumberid=Х
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2015, 13:21
Ответы с готовыми решениями:

Реализовать функцию Split, которая бы мне заносила каждое слово в отдельный элемент массива
Хотел реализовать функцию Split, которая бы мне заносила каждое слово в отдельный элемент массива....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
23.04.2015, 13:46 2
SQL
1
2
3
4
WHERE fld1 IN
  (SELECT id
   FROM tab2
  )
PS
А причем тут функция? И насчет "пробегала по всем записям" применительно к SQL обычно не говорят. Запрос отсылается на сервер, а уж как там действует СУБД - ее личное дело. Главное получить желаемый результат.
1
3 / 3 / 2
Регистрация: 14.03.2013
Сообщений: 150
23.04.2015, 15:56  [ТС] 3
Цитата Сообщение от Grossmeister Посмотреть сообщение
И насчет "пробегала по всем записям" применительно к SQL обычно не говорят
а, ок)
тогда ведь nnumberid будет больше одной строки получать... GROUP BY надо?
0
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
23.04.2015, 16:14 4
Цитата Сообщение от yozzi Посмотреть сообщение
будет больше одной строки получать
Так для этого и стоит не =, а IN, чтобы не бояться "больше одной строки".
Допустим, мы выбрали SELECT-ом значения 1, 5, 27. Тогда запись выше будет эквивалентна такой
SQL
1
WHERE fld1 IN (1, 5, 27)
0
3 / 3 / 2
Регистрация: 14.03.2013
Сообщений: 150
24.04.2015, 12:51  [ТС] 5
Спасибо.

Добавлено через 19 часов 38 минут
Всеж функция нужна тоже.

Объединить эти три запроса в одной функции, которая бы обновляла запись в поле nbalance:
SQL
1
2
3
4
5
SELECT n.vnumber, t.vname, t.noutfavoritecost, noutsystemcost, noutothercost, noutcityphonecost, noutinternationalcost, nsmscost, nmmscost, nwapcost FROM t_numbers n   
FULL JOIN t_contract c 
FULL JOIN t_tariff t ON c.ntariffid=t.id
ON c.id=n.ncontractid
GROUP BY n.vnumber, t.noutfavoritecost, t.vname, noutsystemcost, noutothercost, noutcityphonecost, noutinternationalcost, nsmscost, nmmscost, nwapcost
SQL
1
2
3
4
5
6
SELECT n.vnumber, t.vname, SUM(c.vvalue) FROM t_numbers n   
FULL JOIN t_units c 
FULL JOIN t_unittype t ON c.ntypeid=t.id
ON c.nnumberid=n.id
WHERE vinout='OUTGOING'
GROUP BY n.vnumber, t.vname
SQL
1
2
3
4
5
SELECT n.vnumber, t.vname, SUM(c.nvalue) FROM t_numbers n    
FULL JOIN t_cashactions c 
FULL JOIN t_cashactiontype t ON c.ncashactiontypeid=t.id
ON c.nnumberid=n.id
GROUP BY n.vnumber, t.vname
обновлять данные так:
SQL
1
UPDATE t_numbers SET nbalance =  (Х*Y+Z) WHERE id=res.nnumberid;
, где Х - результат первого запроса, Y - результат sum(c.nvalue) второго запроса, Z - результат sum(c.nvalue) третьего запроса, rec - RECORD

Добавлено через 5 минут
т.е nbalance = (noutfavoritecost*Y + noutsystemcost*Y + noutothercost*Y + ... + nwapcost*Y) + Z
0
24.04.2015, 12:51
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru