Вы можете использовать модификатор WITH ROLLUP
для GROUP BY
, чтобы получить итоговую строку. Однако, поскольку у вас есть недопустимое предложение GROUP BY
(не все неагрегированные столбцы содержатся в предложении GROUP BY
), вы получите неопределенные значения для других столбцов в итоговой строке ROLLUP
. Однако p2o.produktid
будет NULL
, так что вы можете использовать это для очистки других значений. Например:
CREATE VIEW v_invoice AS
SELECT
IF(p2o.produktid IS NULL, NULL, f.id) AS "Invoice nr",
IF(p2o.produktid IS NULL, NULL, b.id) AS "Order id",
IF(p2o.produktid IS NULL, NULL, b.kundid) AS "Customer id",
p2o.produktid AS "Product id",
IF(p2o.produktid IS NULL, NULL, p.namn) AS "Name",
IF(p2o.produktid IS NULL, NULL, p2o.antal) AS "Number",
IF(p2o.produktid IS NULL, NULL, p.pris) AS "Price",
IF(p2o.produktid IS NULL, NULL, (p2o.antal * p.pris)) AS "Price per row",
SUM(p2o.antal * p.pris) AS "Totalsum",
IF(p2o.produktid IS NULL, NULL, b.skickad) AS "Shipped",
IF(p2o.produktid IS NULL, NULL, f.betald) AS "Paid"
FROM
faktura as f
LEFT OUTER JOIN bestallning AS b ON f.orderid = b.id
LEFT OUTER JOIN produkt2order AS p2o ON f.orderid = p2o.orderid
LEFT OUTER JOIN produkt AS p ON p2o.produktid = p.produktid
GROUP BY
p2o.produktid WITH ROLLUP;
Обратите внимание, что поскольку ваш GROUP BY
не включает все неагрегированные столбцы, значения, которые вы видите в VIEW
для этих столбцов, будут неопределенными, и может будет отличаться каждый раз, когда вы SELECT * FROM v_invoice
.