Отказ от ответственности: я не знаю SQLite;)
Структура запроса выглядит хорошо, но две вещи не будут работать с Postgres:
- Я предполагаю, что
printf()
форматирует выходные данные с двумя десятичными знаками, поэтому to_char()
, вероятно, то, что вы ищете
- идентификаторы должны быть заключены в двойные кавычки, а не в одинарные. Так что
AS 'sys_align11'
должно быть `AS" sys_align11 ", но кавычки не обязательны для начала.
SELECT
r.agent AS gebiet,
r.invoiceno AS rechnung,
r.infotext AS auftrag,
c.companyno AS kundenr,
c.companyname AS kunde,
r.itemno AS artikelnr,
r.itemtext AS artikel,
SUM(r.qty) || ' ' || r.unit AS menge,
to_char(SUM(r.turnover) / SUM(r.qty), '0.00') AS preis,
to_char(SUM(r.turnover),'0.00') || ' ' || r.currency AS gesamt,
'2' AS sys_align9,
'2' AS sys_align10,
'2' AS sys_align11
FROM
invoices r
INNER JOIN
company c
ON
r.companyno = c.companyno
WHERE
r.agent = ?
Если turnover
является integer
(или bigin
), вам нужно привести его к числовому, иначе деление выполняется как целочисленное деление, например, SUM(r.turnover)::numeric
Поскольку вы используете агрегатную функцию, вам понадобится какой-то group by
в Postgres - иначе результат не будет детерминированным.
Если invoiceno
является первичным ключом таблицы invoices
, достаточно 'group by r.invoiceno'.