Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SUM() - посчитать сумму отдельно по группам  [new]
QZ
Guest
Добрый день. Сломал уже голову, получается всяк, но не точно как нужно...
Есть таблица вида:

Grpabcval
A1011D144
A1011D1300
B200d223
B200d21640
C3033D031024
C3033D031176
D10jNULL1000000
D30abcd0-10000


Как получить

Grpabcval
A1011D1344
B2022d21663
C3033D032200
D10jNULL1000000
D30abcd0-10000


То есть

Grpabcval
A1011D1(44 + 300)
B200d2(23 + 1640)
C3033D03(1024 + 1176)
D10jNULL1000000
D30abcd0-10000


SUM() не слушается, выкидывает всякое.. Корячась с
SUM(val) OVER (PARTITION BY Grp)
получил нечто очень похожее, но с "удвоенными" строками, не годится..
эх.. Что я упустил? Это кусок запроса, может что-то другое мешается..
11 апр 13, 11:38    [14166081]     Ответить | Цитировать Сообщить модератору
 Re: SUM() - посчитать сумму отдельно по группам  [new]
Glory
Member

Откуда:
Сообщений: 104751
используйте GROUP BY, а не OVER
11 апр 13, 11:39    [14166090]     Ответить | Цитировать Сообщить модератору
 Re: SUM() - посчитать сумму отдельно по группам  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
select grp,a,b,c,sum(val)
from t
group by grp,a,b,c
11 апр 13, 11:42    [14166105]     Ответить | Цитировать Сообщить модератору
 Re: SUM() - посчитать сумму отдельно по группам  [new]
QZ
Guest
мда.. Точно остальное мешается.. Если выкинуть всё кроме работает, а так нет:
SELECT Grp, a, b, c, SUM(val), FLOOR(val/d), CAST(val AS INT)%CAST(d AS INT)
FROM t
GROUP BY Grp, a, b, c, d

Column 't.val' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

А если добавить - неправильно считает. Будем думать дальше, спасибо...
11 апр 13, 11:55    [14166209]     Ответить | Цитировать Сообщить модератору
 Re: SUM() - посчитать сумму отдельно по группам  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
Вам же надо было
QZ
получить

Grpabcval
A1011D1344
B2022d21663
C3033D032200
D10jNULL1000000
D30abcd0-10000
11 апр 13, 11:59    [14166240]     Ответить | Цитировать Сообщить модератору
 Re: SUM() - посчитать сумму отдельно по группам  [new]
QZ
Guest
Паганель, не очень понял что вы имеете ввиду. Ну это же не вся таблица. Да, там много больше столбцов и миллионы строк...
Что-то странное в общем происходит, оно видимо суммирует всё у чего одинаковое "a", не зависимо что было в "Grp".
11 апр 13, 12:06    [14166303]     Ответить | Цитировать Сообщить модератору
 Re: SUM() - посчитать сумму отдельно по группам  [new]
Glory
Member

Откуда:
Сообщений: 104751
QZ
Что-то странное в общем происходит, оно видимо суммирует всё у чего одинаковое "a", не зависимо что было в "Grp".

Суммирует то, что указано суммировать

QZ
Ну это же не вся таблица. Да, там много больше столбцов и миллионы строк...

В приведенном вами примере 5 полей
11 апр 13, 12:09    [14166322]     Ответить | Цитировать Сообщить модератору
 Re: SUM() - посчитать сумму отдельно по группам  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
QZ
Паганель, не очень понял что вы имеете ввиду
Вы хотели получить в результате 5 колонок?
11 апр 13, 12:09    [14166324]     Ответить | Цитировать Сообщить модератору
 Re: SUM() - посчитать сумму отдельно по группам  [new]
QZ
Guest
ам... Я про то что в t много строк. Могу выводить не только 5, а 11.
Ну я просто закомментировал
FLOOR(val/d). CAST(val AS INT)%CAST(d AS INT)

и ничего не изменилось. Ломаю голову где он взял например
Grpabcval
A1011D112344
11 апр 13, 12:17    [14166384]     Ответить | Цитировать Сообщить модератору
 Re: SUM() - посчитать сумму отдельно по группам  [new]
Glory
Member

Откуда:
Сообщений: 104751
QZ
и ничего не изменилось. Ломаю голову где он взял например

В ваших данных - где же еще
11 апр 13, 12:25    [14166447]     Ответить | Цитировать Сообщить модератору
 Re: SUM() - посчитать сумму отдельно по группам  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
QZ
Я про то что в t много строк. Могу выводить не только 5, а 11
Вы строки с колонками не путаете?
11 апр 13, 12:25    [14166449]     Ответить | Цитировать Сообщить модератору
 Re: SUM() - посчитать сумму отдельно по группам  [new]
QZ
Guest
столбцов*

Чёрт побери, это у меня JOIN сбился, а GROUP его спрятал и я визуально не увидел кучу склонированных строк.
Де факто - умножение всех полученных SUM() на случайное число. Забавный эффект.

Вопрос снимается, благодарю за отзывчивость. =)
11 апр 13, 12:26    [14166452]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить