172 похожих чатов

Подскажите плиз: Есть запрос с оконной функцией, которая получает значение из

выражения.
Мне нужно результат этой оконной функции добавить в еще одно выражение, в котором происходят вычисления со значениями из полей связанной таблицы: <window_result> - <parent_discount> + <parent_expansion>
И желательно бы еще обернуть все в ROUND() 😀

Можно ли такое провернуть в одном запросе?

Сам запрос: https://gist.github.com/Ingco/6789b763d4185cdf5c186d014d5dfd0a (получен из ОРМ 😅)

где:
- raw_final_sum алиас результата оконной функции
- "stock_purchaseorder"."discount" дисконт из связанной таблицы
- "stock_purchaseorder"."expansion" надбавка из связанной таблицы

5 ответов

35 просмотров

"Стандартный" ответ на подобные вопросы в SQL — nest it. ;)

Artem-Gubatenko Автор вопроса
Yaroslav Schekin
"Стандартный" ответ на подобные вопросы в SQL — ne...

как подзапрос, а его результат уже в выражение? SELECT ..., (SELECT SUM(...) OVER (...) FROM ...) - <discount> + <expansion> FROM ... примерно в этом направлении?

Artem Gubatenko
как подзапрос, а его результат уже в выражение? SE...

Я имел в виду вот это: SELECT ... FROM ( SELECT "stock_purchaseorderline"."purchase_order_id", "stock_purchaseorder"."discount", "stock_purchaseorder"."expansion", SUM(((("stock_purchaseorderline"."cost_per_item" * "stock_purchaseorderline"."quantity") - ROUND(((("stock_purchaseorderline"."cost_per_item" * "stock_purchaseorderline"."quantity") * "stock_purchaseorderline"."discount") / 100), 2)) + ROUND((((("stock_purchaseorderline"."cost_per_item" * "stock_purchaseorderline"."quantity") - ROUND(((("stock_purchaseorderline"."cost_per_item" * "stock_purchaseorderline"."quantity") * "stock_purchaseorderline"."discount") / 100), 2)) * "stock_purchaseorderline"."expansion") / 100), 2))) OVER (PARTITION BY "stock_purchaseorderline"."purchase_order_id" ORDER BY "stock_purchaseorderline"."purchase_order_id") AS "raw_final_sum", COALESCE((SELECT SUM(U0."amount") AS "paid_amount" FROM "finance_transactionline" U0 WHERE (U0."content_type_id" = 37 AND U0."object_id" = ("stock_purchaseorderline"."purchase_order_id")) GROUP BY U0."content_type_id", U0."object_id" LIMIT 1), 0.00) AS "paid_sum", "stock_purchaseorder"."number" AS "number" FROM "stock_purchaseorderline" INNER JOIN "stock_purchaseorder" ON ("stock_purchaseorderline"."purchase_order_id" = "stock_purchaseorder"."id") WHERE "stock_purchaseorder"."supplier_id" = 13 GROUP BY "stock_purchaseorderline"."id", ROUND(((("stock_purchaseorderline"."cost_per_item" * "stock_purchaseorderline"."quantity") * "stock_purchaseorderline"."discount") / 100), 2), ROUND((((("stock_purchaseorderline"."cost_per_item" * "stock_purchaseorderline"."quantity") - ROUND(((("stock_purchaseorderline"."cost_per_item" * "stock_purchaseorderline"."quantity") * "stock_purchaseorderline"."discount") / 100), 2)) * "stock_purchaseorderline"."expansion") / 100), 2), COALESCE((SELECT SUM(U0."amount") AS "paid_amount" FROM "finance_transactionline" U0 WHERE (U0."content_type_id" = 37 AND U0."object_id" = ("stock_purchaseorderline"."purchase_order_id")) GROUP BY U0."content_type_id", U0."object_id" LIMIT 1), 0.00), "stock_purchaseorder"."number", "stock_purchaseorder"."discount", "stock_purchaseorder"."expansion" ) AS nested_query ORDER BY nested_query."purchase_order_id" Как это сделать в используемом ORM — совсем другой вопрос. ;)

Artem-Gubatenko Автор вопроса
Yaroslav Schekin
Я имел в виду вот это: SELECT ... FROM ( ...

спасибо, буду разбираться не сможем в ОРМ, перейдем на чистый, персонально для этого запроса :)

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта