добавление вычисляемого / виртуального столбца к существующему запросу - PullRequest
0 голосов
/ 08 июля 2010

Мой запрос возвращает общее количество столбцов продаж за каждый месяц и общее количество покупок за каждый месяц для определенных категорий.

SELECT theMonth, 
       sum(Sales) as sumSales, 
       sum(Saleswotax) as sumSaleswotax, 
       sum(Purchases) as sumPurchases, 
       sum(Purchaseswotax) as sumPurchaseswotax 
 FROM ( SELECT date_format(saledate, '%Y-%m') AS theMonth, 
               sales.cost as Sales, 
               ROUND(sales.cost*0.85, 2) AS Saleswotax, 
               0 AS Purchases, 
               0 AS Purchaseswotax 
          FROM sales, products 
         WHERE sales.product = products.name 
           AND category='Food'
        UNION ALL
        SELECT date_format(purchasedate, '%Y-%m') AS theMonth, 
               0 as Sales, 
               0 AS Saleswotax, 
               purchases.cost as Purchases, 
               ROUND(purchases.cost*0.85, 2) AS Purchaseswotax, 
          FROM purchases) AS all_costs
    group by theMonth

Я пытаюсь вернуть столбец (который фактически не существует в таблице) в моем запросе, который является просто вычислением существующей таблицы, т. Е. Столбцы saleswotax и purchaseaseswotax.

Я использую функцию и возвращаю ее как имя ... почему она не работает?

Ответы [ 3 ]

1 голос
/ 08 июля 2010

В объединении вы использовали 0 в качестве столбцов продаж и покупок, но не сделали этого для столбцов -wotax.Они должны соответствовать, чтобы профсоюз работал должным образом (я думаю, вы это знаете, поскольку вы сделали это для продаж и закупок).

0 голосов
/ 08 июля 2010

Вам необходимо удалить запятую после AS Purchasewotax во второй половине UNION:

SELECT theMonth, 
       sum(Sales) as sumSales, 
       sum(Saleswotax) as sumSaleswotax, 
       sum(Purchases) as sumPurchases, 
       sum(Purchaseswotax) as sumPurchaseswotax 
 FROM ( SELECT date_format(saledate, '%Y-%m') AS theMonth, 
               sales.cost as Sales, 
               ROUND(sales.cost*0.85, 2) AS Saleswotax, 
               0 AS Purchases, 
               0 AS Purchaseswotax 
          FROM sales, products 
         WHERE sales.product = products.name 
           AND category='Food'
        UNION ALL
        SELECT date_format(purchasedate, '%Y-%m') AS theMonth, 
               0 as Sales, 
               0 AS Saleswotax, 
               purchases.cost as Purchases, 
               ROUND(purchases.cost*0.85, 2) AS Purchaseswotax
          FROM purchases) AS all_costs
 GROUP BY theMonth
0 голосов
/ 08 июля 2010

В последний раз, когда я видел, в MySQL не было декларативной поддержки вычисляемых полей.Вам нужно будет либо добавить вычисляемые столбцы в вашу таблицу и заполнить их, используя триггер UPDATE / INSERTИли создайте представления с дополнительными вычисляемыми столбцами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...