Моя простая таблица с именем материала с этими столбцами:

mat_id       mat_name      stock_in       stock_released    date
1             alloy          30                0            feb13
2             steel          15                0            feb13
3             alloy          0                 3            feb14

Как я могу его сгенерировать или рассчитать как:

mat_id       mat_name      stock_in       stock_released    Balance         date
1             alloy          30                0               30           feb13
2             steel          15                0               15           feb13
3             alloy          0                 3               15           feb14

Вот мой существующий код, но с балансом что-то не так, потому что он суммирует все без учета названия материала:

SELECT 
    `material`.`mat_id`,
    `material`.`mat_name`,
    `material`.`stock_in`,
    `material`.`stock_released`,

    @Balance := @Balance + `material`.`stock_in` - `material`.`stock_released` AS `Balance`,
    `material`.`date`
FROM `material`, (SELECT @Balance := 0) AS variableInit
WHERE mat_name = mat_name
ORDER BY `material`.`mat_id` ASC

Как он может создать из этого представление?

1
user3117337 13 Фев 2014 в 02:51
Вы не можете этого сделать в MySQL. В предложении from есть как переменные, так и подзапрос. Вернитесь к своему предыдущему вопросу и посмотрите мой ответ. Это можно было бы поставить в поле зрения.
 – 
Gordon Linoff
13 Фев 2014 в 02:54

1 ответ

Лучший ответ

С этими данными запрос, который получает текущий баланс:

SELECT m.`mat_id`, m.`mat_name`, m.`stock_in`, m.`stock_released`,
       (select sum(stock_in) - sum(stock_released)
        from material m2
        where m2.mat_name = m.mat_name and
              m2.mat_id <= m.mat_id
       ) as balance,
      m.`date`
FROM `material` m
ORDER BY m.`mat_id` ASC;

Это вы можете поместить в поле зрения.

0
Gordon Linoff 13 Фев 2014 в 03:06
Как насчет того, когда у меня есть поставщик_id в столбце материала и он должен совпадать с таким же поставщиком_id из таблицы поставщиков и отображать имя_поставщика, сэр?
 – 
user3117337
13 Фев 2014 в 03:15
Затем вы добавите в подзапрос еще одно условие, m2.supplier_name = m.supplier_name.
 – 
Gordon Linoff
13 Фев 2014 в 03:15
Это правильно, сэр? SELECT m. mat_id , m. mat_name , s. sup_name , m. stock_in , m. stock_released , (select sum(stock_in) - sum(stock_released) from material m2, supplier s2 where m2.mat_name = m.mat_name and m2.mat_id <= m.mat_id m2.supplier = s2.sup_id ) as balance, m. date` ОТ material м, supplier s, ЗАКАЗАТЬ m. mat_id ASC`
 – 
user3117337
13 Фев 2014 в 03:31