powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите разобраться с SUM
9 сообщений из 9, страница 1 из 1
Помогите разобраться с SUM
    #39405490
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В программе была ошибка с отчетами (неправильно могли начисляться суммы). Программу исправили и теперь чтобы найти разницу и откорректировать суммы (доплатить/снять):
1. беру старые данные начислений, суммирую по столбцам с суммами (sm1-8) чтобы по ключевым полям CODE, NUMB, RASH получить 1 строчку.
2. Тоже само что и в п.1, только с новыми данными.
3. После этого отнимаю один список от другого.

В целом все ХОРОШО, но вот есть одна загвоздка которую не могу решить.
По какой-то причине в результате я получаю 1956 строк, которые попарно сначала сумма +, а потом -. В сумме оно дает 0,00.
Не могу избавиться от этого.
Что неправильно делаю?

Исходные данные:

Таблица со старыми данными начислений (которые формировались ежемесячно):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE TABLE RJ_OLD (
    CODE  INTEGER,
    NUMB  BIGINT,
    RASH  VARCHAR(15),
    SM1   DECIMAL(9,2),
    SM2   DECIMAL(9,2),
    SM3   DECIMAL(9,2),
    SM4   DECIMAL(9,2),
    SM5   DECIMAL(9,2),
    SM6   DECIMAL(9,2),
    SM7   DECIMAL(9,2),
    SM8   DECIMAL(9,2)
);

INSERT INTO RJ_OLD (CODE, NUMB, RASH, SM1, SM2, SM3, SM4, SM5, SM6, SM7, SM8) VALUES (26, 500315, '162119481', 0, 0, 0, 0, 0, 18.85, 0, 0);
INSERT INTO RJ_OLD (CODE, NUMB, RASH, SM1, SM2, SM3, SM4, SM5, SM6, SM7, SM8) VALUES (26, 500315, '162119481', 0, 0, 0, 0, 0, 18.85, 0, 0);
INSERT INTO RJ_OLD (CODE, NUMB, RASH, SM1, SM2, SM3, SM4, SM5, SM6, SM7, SM8) VALUES (26, 500315, '162119481', 0, 0, 0, 0, 0, 18.85, 0, 0);
INSERT INTO RJ_OLD (CODE, NUMB, RASH, SM1, SM2, SM3, SM4, SM5, SM6, SM7, SM8) VALUES (26, 500315, '162119481', 0, 0, 0, 0, 0, 101.06, 0, 0);
INSERT INTO RJ_OLD (CODE, NUMB, RASH, SM1, SM2, SM3, SM4, SM5, SM6, SM7, SM8) VALUES (26, 500315, '162119461', 0, 0, 0, 0, 0, 101.06, 0, 0);
INSERT INTO RJ_OLD (CODE, NUMB, RASH, SM1, SM2, SM3, SM4, SM5, SM6, SM7, SM8) VALUES (26, 500315, '162119461', 0, 0, 0, 0, 0, 101.06, 0, 0);


Таблица с новыми данными начислений (переформированные данные помесячно после исправления ошибки):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE TABLE RJ_NEW (
    CODE  INTEGER,
    NUMB  BIGINT,
    RASH  VARCHAR(15),
    SM1   DECIMAL(9,2),
    SM2   DECIMAL(9,2),
    SM3   DECIMAL(9,2),
    SM4   DECIMAL(9,2),
    SM5   DECIMAL(9,2),
    SM6   DECIMAL(9,2),
    SM7   DECIMAL(9,2),
    SM8   DECIMAL(9,2)
);

INSERT INTO RJ_NEW (CODE, NUMB, RASH, SM1, SM2, SM3, SM4, SM5, SM6, SM7, SM8) VALUES (26, 500315, '162119481', 0, 0, 0, 0, 0, 18.85, 0, 0);
INSERT INTO RJ_NEW (CODE, NUMB, RASH, SM1, SM2, SM3, SM4, SM5, SM6, SM7, SM8) VALUES (26, 500315, '162119481', 0, 0, 0, 0, 0, 18.85, 0, 0);
INSERT INTO RJ_NEW (CODE, NUMB, RASH, SM1, SM2, SM3, SM4, SM5, SM6, SM7, SM8) VALUES (26, 500315, '162119481', 0, 0, 0, 0, 0, 18.85, 0, 0);
INSERT INTO RJ_NEW (CODE, NUMB, RASH, SM1, SM2, SM3, SM4, SM5, SM6, SM7, SM8) VALUES (26, 500315, '162119461', 0, 0, 0, 0, 0, 101.06, 0, 0);
INSERT INTO RJ_NEW (CODE, NUMB, RASH, SM1, SM2, SM3, SM4, SM5, SM6, SM7, SM8) VALUES (26, 500315, '162119461', 0, 0, 0, 0, 0, 101.06, 0, 0);
INSERT INTO RJ_NEW (CODE, NUMB, RASH, SM1, SM2, SM3, SM4, SM5, SM6, SM7, SM8) VALUES (26, 500315, '162119461', 0, 0, 0, 0, 0, 101.06, 0, 0);




Выполняю запрос на суммирование:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  select
    code,
    numb,
    rash,
    sum(sm1) as sm1,
    sum(sm2) as sm2,
    sum(sm3) as sm3,
    sum(sm4) as sm4,
    sum(sm5) as sm5,
    sum(sm6) as sm6,
    sum(sm7) as sm7,
    sum(sm8) as sm8
from
    rj_new
group by code, numb, rash


Получаю такой результат:
Код: sql
1.
2.
3.
CODE	NUMB	RASH	SM1	SM2	SM3	SM4	SM5	SM6	SM7	SM8
26	500315	162119461	0	0	0	0	0	303.18	0	0
26	500315	162119481	0	0	0	0	0	56.55	0	0




Почему получается 2 строчки. Думал может пробел в поле RASH (Хотя по командам INSERT уже видно что его нет). Прогнал обе таблицы trim(rash). Результат не изменился.
Попробовал сделать индекс на обе таблицы:
CREATE INDEX IDX_RJ_NEW_RAX ON RJ_NEW (CODE, NUMB, RASH);
CREATE INDEX IDX_RJ_OLD_RAX ON RJ_OLD (CODE, NUMB, RASH);
Результат не изменился.
Исходные таблицы содержат много данных (по 5млн. строк каждая), решил повторить только на описанных выше примерах - результат не изменился: при суммировании получаю в результат 2 строчки.


--------------------------
Firebird 3.0.1.32609;
IBExpert 2017.2.7.1;
Windows 10 32-bit;
4Gb RAM;
SSD 512Mb + HDD 1 Tb;
Настройки по умолчанию
...
Рейтинг: 0 / 0
Помогите разобраться с SUM
    #39405501
Sia-Ori1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не пойму вопрос.
group by code, numb, rash как раз и выбирает уникальные комбинации code, numb, rash.
В примере code, numb одинаковы, а rash имеет два разных значения. Итого - две строки.
...
Рейтинг: 0 / 0
Помогите разобраться с SUM
    #39405507
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

воспроизвёл. Походу эта бага при сортировки строк. Воспроизводится даже так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT
    RASH,
    SUM(SM1) AS SM1,
    SUM(SM2) AS SM2,
    SUM(SM3) AS SM3,
    SUM(SM4) AS SM4,
    SUM(SM5) AS SM5,
    SUM(SM6) AS SM6,
    SUM(SM7) AS SM7,
    SUM(SM8) AS SM8
FROM
    RJ_NEW
GROUP BY RASH



в трекер иди. Воспроизводимый пример у тебя есть
...
Рейтинг: 0 / 0
Помогите разобраться с SUM
    #39405508
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисвоспроизвёлДа ну ?
...
Рейтинг: 0 / 0
Помогите разобраться с SUM
    #39405510
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sia-Ori1,
Все вы правы. Извините не заметил изменения 8-6-8
Почти одинаковые.
...
Рейтинг: 0 / 0
Помогите разобраться с SUM
    #39405514
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,
ВСЕМ СПАСИБО ЧТО ОТКЛИКНУЛИСЬ. ТАМ ДЕЙСТВИТЕЛЬНО В 2 ПОСЛЕДНИХ СТРОЧКАХ ДРУГОЙ RASH.
ВОПРОС СНЯТ.
...
Рейтинг: 0 / 0
Помогите разобраться с SUM
    #39405515
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

тьфу блин. Что ты мне голову морочишь, ещё и строки похожие подобрал
Где тут смайл с головой бьющейся о стену?
...
Рейтинг: 0 / 0
Помогите разобраться с SUM
    #39405517
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извиняюсь, сам несколько раз смотрел пытался разные символы в строках разглядеть да всё мимо
...
Рейтинг: 0 / 0
Помогите разобраться с SUM
    #39405531
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,
А я 3 дня долбился об стену.
Тоже не видел
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите разобраться с SUM
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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