2017-02-02 1 views
0

я получил от запроса выберите этот вид таблицы (только простой пример):Как я могу агрегировать после специальных идентификаторов в coulmn в SQL?

D   C   Letter 
20153  200  x 
20154  300  x 
20161  250  x 
20162  180  x 
20153  500  y 
20154  380  y 
20161  550  y 
20162  170  y 
20153  230  z 
20154  700  z 
20161  210  z 
20162  185  z 

Таким образом, столбец D повторяется после четырех записей. C всегда отличается, и буква меняется после четырех записей.

Теперь я хотел бы подытожить каждый D (все 20153, все 20154, ...) и поместить эту сумму в виде столбца рядом с буквой.

Нечто подобное было бы здорово:

D   C   Letter  Sum 
20153  200  x   930 
20154  300  x   1380 
20161  250  x   1010 
20162  180  x   535 
20153  500  y   930 
20154  380  y   1380 
20161  550  y   1010 
20162  170  y   535 
20153  230  z   930 
20154  700  z   1380 
20161  210  z   1010 
20162  185  z   535 

Я уже пытался ROLLUP и CUBE, но это не работает, как ожидалось. После этого я хочу рассчитать процент C в соответствии с суммой.

+0

Нет ID или временная метка столбца? – jarlh

+0

Нет, D - это дата (YYYYQ) Q = Quartal. – victoria14

ответ

2

Вы хотите аналитические функции:

select d, c, letter, sum(c) over (partition by d) as d_sum 
from t 
order by letter; 
+0

Хорошо, это работает отлично. Я только что увидел, что ошибся. Скажем, моя таблица из моего вопроса состоит из x, y и z. Но есть также a, b и т. Д. Итак, общее количество «20153» - «100 000», «20154» - «200 000», «20161» - «250 000», а «20162» - «150 000», , Как добавить эти значения в «D» в качестве нового столбца? – victoria14

+0

@ victoria14. , , Я не совсем понимаю, что вы имеете в виду в комментарии. Новые вопросы следует задавать как вопросы, а не как комментарий. Если вы просто хотите добавить сумму в другой столбец, используйте '+'. –