:: Не фоксом единым
Не могу победить команду. Помогите!
tata
Автор

Сообщений: 3381
Откуда: Казань
Дата регистрации: 23.10.2005
Исходный текст на MS SQL, который нужно переписать на postgres.
/*update a set a.rest_rub = abs(b.ok)
from #Taccount a
join t_account_bal_hst b on a.account_number = b.number and b.date1 <= @odate2 and b.date_next > @odate2
where a.account_number in (select account_number from #Taccount group by account_number having count(account_number) = 1)
and account_curr <> '643'
and abs(b.ok) <> a.rest_rub
*/
Код на ПГ:
update v_taccount
set v_taccount.rest_rub = abs(d.ok)
from
(select c.* from v_taccount c
join id.t_account_bal_hst b on c.account_number = b.number
and b.date1 <= v_odate2::date and b.date_next > v_odate2::date) d;
and v_taccount.account_number in
(select account_number from v_taccount group by account_number having count(account_number) = 1)
and v_taccount.account_curr <> '643'
and abs(b.ok) <> v_taccount.rest_rub;
*/
Ошибка
SQL Error [42P01]: ERROR: missing FROM-clause entry for table "b"
Где: PL/pgSQL function usp_115_insert_detail(date,date,integer) line 102 at SQL statement.
Я замучилась с этим кусочком.
Как бы я его не изменяла, что бы ни писала, ошибка за ошибкой.
Помогите!



Исправлено 1 раз(а). Последнее : tata, 11.12.22 09:38
Ratings: 0 negative/0 positive
Re: Не могу победить команду. Помогите!
ВладимирС

Сообщений: 1687
Дата регистрации: 03.11.2005
Может быть:
join id.t_account_bal_hst
Неужели таблица так и называется ?
id.t_account_bal_hst
Ratings: 0 negative/0 positive
Re: Не могу победить команду. Помогите!
tata
Автор

Сообщений: 3381
Откуда: Казань
Дата регистрации: 23.10.2005
ВладимирС
Может быть:
join id.t_account_bal_hst
Неужели таблица так и называется ?
id.t_account_bal_hst
Да, именно так и называется, еще и лежит в другой схеме, поэтому схему приходится указывать.
Ratings: 0 negative/0 positive
Re: Не могу победить команду. Помогите!
ВладимирС

Сообщений: 1687
Дата регистрации: 03.11.2005
1. в строке:
and b.date1 <= v_odate2::date and b.date_next > v_odate2::date) d;
в конце точка с запятой... как бы конец команды... хотя вроде пытаетесь продолжить команду update ...

2. Я конечно не вижу полного описания таблиц, особенно v_taccount, чтобы посмотреть полный перечень полей...(есть ли поле уникальности для таблицы)
Ну и т.к. postgresql что то аналогичное с ораклом, то советую посмотреть в сторону команды MERGE (https://www.postgresql.org/docs/current/sql-merge.html)...
Ratings: 0 negative/0 positive
Re: Не могу победить команду. Помогите!
tata
Автор

Сообщений: 3381
Откуда: Казань
Дата регистрации: 23.10.2005
Победила-таки.
with t as (
select *
from v_taccount as t1
join id.t_account_bal_hst as t2 on t1.account_number = t2.number
and t2.date1 <= v_odate2::date and t2.date_next > v_odate2::date
and t1.account_number in
(select account_number from v_taccount group by account_number having count(account_number) = 1)
and t1.account_curr <> '643'
and abs( t2.ok) <> t1.rest_rub)
update v_taccount
set rest_rub = abs(t.ok)
from t
where t.account_number = v_taccount.account_number;

Насколько правильно, покажет отладка с цифрами, но хотя бы синтаксис не ругается, уже хорошо.
Ratings: 0 negative/0 positive
Re: Не могу победить команду. Помогите!
PaulWist

Сообщений: 14427
Дата регистрации: 01.04.2004
Звездочку убери

with t as (
select * abs(t.ok) as OK, t1.account_number -- убрать звёздочку, что бы не выбирать лишних данных, вычислить ABS
from v_taccount as t1
join id.t_account_bal_hst as t2 on t1.account_number = t2.number
and t2.date1 <= v_odate2::date and t2.date_next > v_odate2::date
and t1.account_number in
(select account_number from v_taccount group by account_number having count(account_number) = 1)
and t1.account_curr <> '643'
and abs( t2.ok) <> t1.rest_rub)
update v_taccount
set rest_rub = abs(t.ok) -- ABS не нужен, вычислен в cte
from t
where t.account_number = v_taccount.account_number;


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)




Исправлено 3 раз(а). Последнее : PaulWist, 13.12.22 11:33
Ratings: 0 negative/0 positive
Re: Не могу победить команду. Помогите!
tata
Автор

Сообщений: 3381
Откуда: Казань
Дата регистрации: 23.10.2005
Не работает без *.
Ругается, то нет таблицы t, то нет таблицы t1.
Некогда пока разбираться с этим, оставила *.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 1 (Гостей: 1)

© 2000-2023 Fox Club 
Яндекс.Метрика