Reputation: 25133
I have query:
SELECT
acc.usage AND EXISTS (
SELECT * FROM order_bt prev_order
WHERE sys_period @> sys_time() AND
prev_order.id = o.id AND prev_order.app_period && acc.usage_range
) as usage,
acc.usage_range,
acc.invoice,
acc.invoice_range,
o.*
FROM "order" o
left join period prd on prd.id = period_id
LEFT JOIN accounting_ready() acc ON TRUE
WHERE
( acc.usage AND EXISTS (
SELECT * FROM order_bt prev_order
WHERE sys_period @> sys_time() AND
prev_order.id = o.id AND prev_order.app_period && acc.usage_range
) OR acc.invoice )
In this query next part is copy/paste:
acc.usage AND EXISTS (
SELECT * FROM order_bt prev_order
WHERE sys_period @> sys_time() AND
prev_order.id = o.id AND prev_order.app_period && acc.usage_range
) as usage,
Is there a way to write query without this copy/paste?
Upvotes: 0
Views: 28
Reputation:
You could put your query into a derived table:
SELECT *
FROM (
SELECT acc.usage AND EXISTS (
SELECT * FROM order_bt prev_order
WHERE sys_period @> sys_time() AND
prev_order.id = o.id AND prev_order.app_period && acc.usage_range
) as usage,
acc.usage_range,
acc.invoice,
acc.invoice_range,
o.*
FROM "order" o
left join period prd on prd.id = period_id
LEFT JOIN accounting_ready() acc ON TRUE
) t
WHERE usage OR acc.invoice
Upvotes: 1