2013-09-27 4 views
0

Я столкнулся с некоторой проблемой mysql с суммой. Я нужна таблица счетов-фактур, как это:Mysql сумма строк как значение строки

id invoice_num net_value date    total_month 
_______________________________________________________ 
1 100   100.00  21.01.2013  500.00 
2 101   300.00  22.01.2013  500.00 
3 102   100.00  23.01.2013  500.00 
4 103   900.00  01.02.2013  900.00 
. 
. 
. 

Проблема заключается в том, как вычислить сумму всех счетов за месяц (т.е. январь, как указано выше) и отображать эту сумму в качестве значения в последней колонке для счетов-фактур с января. Общие разговоры, мне нужна сумма значений счетов, сгруппированных по месяцам, но отображаемых в каждой строке. Заранее спасибо :)

+1

Каков тип данных в столбце даты? Вы можете использовать 'GROUP BY MONTH (date)'? – hjpotter92

+0

, если ваш столбец даты выглядит liek, обновите его до ISO с помощью str_to_date, чтобы SQL мог видеть его как дату. http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date – AdrianBR

ответ

2

, если у вас нет даты ISO, чтобы это произошло

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

mysql> SELECT STR_TO_DATE('01.5.2013','%d.%m.%Y'); 
     -> '2013-05-01' 

ваш запрос, если дата в ISO:

SELECT invoices.id, invoices.invoice_num, invoices.net_value, invoices.date, monthly.total_month 
FROM invoices 
INNER JOIN 
    (SELECT month(date) AS MONTH, 
      sum(net_value) AS total_month 
    FROM invoices group by month(date)) AS monthly ON monthly.MONTH=MONTH(invoices.date) 
+0

Благодарим вас за предложение, однако в том случае, когда есть много внутренних запросов данных, очень неэффективен. Примерно о дате formatit не проблема, проблема в том, что группировка дает меньше столбца, суммированного по значению, и мне нужно такое же количество столбцов с суммой в одном поле ... – user2823585

+0

1. Это оптимизированный способ сделать это. В случае большого количества данных вы в любом случае выбираете «внутренний выбор» 12 рядов в год. У вас есть миллионы лет? № 2. Группирование не уменьшает количество столбцов. 3. Запрос выше возвращает именно то, что вы просили, по оптимальной скорости, с одной строкой в ​​день и ежемесячной суммой. Пожалуйста, прочитайте, в каком запросе находится группа. 4. Дата в строчном формате - проблема, поскольку движок не может выполнять функции даты в строках. – AdrianBR

+0

Не выпускать I meand не проблема на данный момент :) однако очень спасибо за ответ :) – user2823585

0
select id,invoice_num,net_value,month(date),sum(total_month) as total_month 
from invoices 
group by month(date) 
+1

незаконное использование группировки. см. http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html у вас есть неагрегированные поля за пределами вашей группировки - они вернут значение первой строки, а не правильные значения – AdrianBR

+0

@AdrianBR Спасибо за информацию. – aaron

Смежные вопросы