Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите разобраться с SUM / 9 сообщений из 9, страница 1 из 1
16.02.2017, 10:23
    #39405490
akrush
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с SUM
В программе была ошибка с отчетами (неправильно могли начисляться суммы). Программу исправили и теперь чтобы найти разницу и откорректировать суммы (доплатить/снять):
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
16.02.2017, 10:33
    #39405501
Sia-Ori1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с SUM
Не пойму вопрос.
group by code, numb, rash как раз и выбирает уникальные комбинации code, numb, rash.
В примере code, numb одинаковы, а rash имеет два разных значения. Итого - две строки.
...
Рейтинг: 0 / 0
16.02.2017, 10:38
    #39405507
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с SUM
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
16.02.2017, 10:39
    #39405508
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с SUM
Симонов ДенисвоспроизвёлДа ну ?
...
Рейтинг: 0 / 0
16.02.2017, 10:40
    #39405510
akrush
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с SUM
Sia-Ori1,
Все вы правы. Извините не заметил изменения 8-6-8
Почти одинаковые.
...
Рейтинг: 0 / 0
16.02.2017, 10:41
    #39405514
akrush
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с SUM
akrush,
ВСЕМ СПАСИБО ЧТО ОТКЛИКНУЛИСЬ. ТАМ ДЕЙСТВИТЕЛЬНО В 2 ПОСЛЕДНИХ СТРОЧКАХ ДРУГОЙ RASH.
ВОПРОС СНЯТ.
...
Рейтинг: 0 / 0
16.02.2017, 10:41
    #39405515
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с SUM
akrush,

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


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