Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите разобраться со строкой ИТОГО.. / 12 сообщений из 12, страница 1 из 1
13.08.2013, 09:47:48
    #38364159
Ruless
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со строкой ИТОГО..
Приветствую уважаемые профессионалы!

Делаю примерно такой запрос, все работает, но никак не могу добавить итоговые строки для столбцов summa, prihod, terminal.
То есть внизу таблицы должна отображаться строка ИТОГО: где выводятся общие суммы для этих трех столбцов.

Всю голову сломал, никак не работает, прошу помогите разобраться.

Делаю примерно так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SELECT dt, nomer, summa, prihod, terminal
    FROM(   SELECT  date dt1, oplata_date dt, 
	num nomer,
 	dogovor_itog summa,
   IF(   oplata_type='nal', oplata_summ,'') prihod,
   IF(   oplata_type='beznal', oplata_summ,'') terminal
          FROM
   oplata   LEFT JOIN
   cred_dog
    ON     oplata.dogovor_id=cred_dog.dogovor_id
    JOIN point  ON point.point_id=oplata.point_id
    JOIN dogovor  ON     dogovor.dogovor_id=oplata.dogovor_id

   UNION all

  SELECT  charge_date dt1, charge_date dt,
      '' nomer,
        '' summa,
        if( charge_summ<0 and charge_type='nal', -1*charge_summ,'') prihod,
        if( charge_summ<0 and charge_type<>'nal', -1*charge_summ,'') terminal
    
        FROM charge
 )
finans
ORDER BY  dt1
...
Рейтинг: 0 / 0
13.08.2013, 10:33:22
    #38364244
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со строкой ИТОГО..
а возможности GROUP BY ... WITH ROLLUP вас не устраивают?
...
Рейтинг: 0 / 0
13.08.2013, 10:38:03
    #38364259
Ruless
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со строкой ИТОГО..
Возможно я что-то делаю не верно, но это вызывает ошибку..

Код: sql
1.
2.
ORDER BY  dt1
GROUP BY dt WITH ROLLUP
...
Рейтинг: 0 / 0
13.08.2013, 10:50:12
    #38364286
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со строкой ИТОГО..
Ruless,

а итоги надо подводить - по каким столбцам? как суммировать?
Просто нужен развернутый перечень и общий итог? тогда rollup не поможет, нужен обычный UNION ALL и сумма во втором селекте.
То есть что-то вроде
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT  
  date dt1, oplata_date dt, num nomer,
  dogovor_itog summa,
  IF(oplata_type='nal', oplata_summ,'') prihod,
  IF(oplata_type='beznal', oplata_summ,'') terminal
FROM oplata   
LEFT JOIN cred_dog ON  oplata.dogovor_id=cred_dog.dogovor_id
JOIN point ON point.point_id=oplata.point_id
JOIN dogovor  ON  dogovor.dogovor_id=oplata.dogovor_id

UNION ALL
SELECT  
  null dt1, null dt, null nomer,
  sum(dogovor_itog) summa,
  sum(IF(oplata_type='nal', oplata_summ,'')) prihod,
  sum(IF(oplata_type='beznal', oplata_summ,'')) terminal
FROM oplata   
LEFT JOIN cred_dog ON  oplata.dogovor_id=cred_dog.dogovor_id
JOIN point ON point.point_id=oplata.point_id
JOIN dogovor  ON  dogovor.dogovor_id=oplata.dogovor_id
order by dt1



хотя это вроде бы задача интерфейса а не SQL...
...
Рейтинг: 0 / 0
13.08.2013, 11:01:31
    #38364323
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со строкой ИТОГО..
наверное, более оптимален такой вариант:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE TEMPORARY TABLE `for_itogs`
SELECT  
  date dt1, oplata_date dt, num nomer,
  dogovor_itog summa,
  IF(oplata_type='nal', oplata_summ,'') prihod,
  IF(oplata_type='beznal', oplata_summ,'') terminal
FROM oplata   
LEFT JOIN cred_dog ON  oplata.dogovor_id=cred_dog.dogovor_id
JOIN point ON point.point_id=oplata.point_id
JOIN dogovor  ON  dogovor.dogovor_id=oplata.dogovor_id;

select dt1, dt, nomer, summa, prihod, terminal from `for_itogs`
union all 
select null, null, null, sum(summa), sum(prihod), sum(terminal) from `for_itogs`
order by dt1;

drop temporary table `for_itogs`;
...
Рейтинг: 0 / 0
13.08.2013, 13:44:38
    #38364617
Ruless
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со строкой ИТОГО..
Cygapb-007,

Большое спасибо за помошь!
...
Рейтинг: 0 / 0
14.08.2013, 08:54:04
    #38365600
Ruless
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со строкой ИТОГО..
Cygapb-007наверное, более оптимален такой вариант

Код: sql
1.
2.
3.
 SELECT dt, nomer, naimen, summa, prihod, terminal, rashod, pr from for_itogs
 UNION all
select null, null, null, sum(summa), sum(prihod), sum(terminal), sum(rashod), null from for_itogs



Все отлично работает, только UNION отказывается, по отдельности все выводит замечательно, пробовал каждый запрос закрыть в скобки, результата не дало.
...
Рейтинг: 0 / 0
14.08.2013, 09:40:51
    #38365633
Ruless
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со строкой ИТОГО..
Как я понимаю он не может 2 раза открыть for_itogs, если создать for_itogs2, все работает

Код: sql
1.
2.
3.
SELECT dt, nomer, naimen, summa, prihod, terminal, rashod, pr from for_itogs
UNION all
SELECT null, null, null, sum(summa),if (sum(prihod), sum(prihod)+$otchet->s,''), sum(terminal), sum(rashod), null from for_itogs2
...
Рейтинг: 0 / 0
14.08.2013, 09:44:41
    #38365638
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со строкой ИТОГО..
хз как там блокировки не ставить на чтение... в MS SQL все на ура проходит...
Можно все же попробовать ROLLUP:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT * FROM (
SELECT dt, nomer, naimen, 
  sum(summa)summa, sum(prihod)prihod, sum(terminal)terminal, 
  sum(rashod)rashod, 
  pr 
FROM for_itogs
GROUP BY dt, nomer, naimen,pr WITH ROLLUP
)as r
WHERE dt IS NOT NULL AND nomer IS NOT NULL AND naimen IS NOT NULL AND pr IS NOT NULL
    OR dt IS NULL AND nomer IS NULL AND naimen IS NULL AND pr IS NULL
;

Не совсем то же самое, но итоги подобъет )
...
Рейтинг: 0 / 0
14.08.2013, 09:46:59
    #38365643
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со строкой ИТОГО..
кстати, если ROLLUP устроит, то и временную табличку можно не создавать :)
...
Рейтинг: 0 / 0
14.08.2013, 09:48:10
    #38365644
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со строкой ИТОГО..
Но проще всего итоги подбивать на клиенте, ИМХО
...
Рейтинг: 0 / 0
14.08.2013, 10:11:43
    #38365682
Ruless
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со строкой ИТОГО..
Cygapb-007, хорошо, большое спасибо за помощь, всегда выручаете))
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите разобраться со строкой ИТОГО.. / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]