Я посмотрел различные ответы здесь и провел несколько экспериментов.
В частности, я использую MariaDB 10.1.
Для «простой» вещи вы можете сделать то, что Роберт Д. предложил в своем комментарии:
SELECT Price_Per_SqFt, (Price_Per_SqFt/2) AS col1, (SELECT col1 + 1) AS col2 FROM Items
Если вы используете какую-то агрегатную функцию с внутренним объединением, вы не можете использовать это, но вы можете объединить этот подход с подходом внутреннего объединения следующим образом (NB VAT = "налог с продаж" ... и NB в Поля валюты финансовых данных обычно имеют 4 знака после запятой, я думаю, что это исторический ...)
SELECT
invoices.invoiceNo, invoices.clientID, invoices.Date, invoices.Paid,
invoicesWithSubtotal.Subtotal,
ROUND( CAST( Subtotal * invoices.VATRate AS DECIMAL( 10, 4 )), 2 ) AS VAT,
(SELECT VAT + Subtotal) AS Total
FROM invoices
INNER JOIN
( SELECT Sum( invoiceitems.Charge ) AS Subtotal, invoices.InvoiceNo FROM invoices
INNER JOIN invoiceitems ON invoices.InvoiceNo = invoiceitems.InvoiceNo
GROUP BY invoices.InvoiceNo ) invoicesWithSubtotal
ON invoices.InvoiceNo = invoicesWithSubtotal.InvoiceNo
Я хотел использовать вышеупомянутое, чтобы создать View
для перечисления счетов-фактур с их промежуточными итогами, НДС и итогами ... оказалось, что MariaDB (и почти наверняка MySQL) не разрешают вложение в предложении FROM
, Однако это легко решается путем создания первого View
, в котором перечислены InvoiceNo
и Subtotal
, а затем создания второго View
, который ссылается на первое. Что касается производительности, я понятия не имею об этом виде двойной View
договоренности.