8 / 8 / 2
Регистрация: 20.02.2009
Сообщений: 139

Сортировка и накопленная сумма

10.07.2011, 14:38. Показов 4969. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый

Надеюсь на вашу помощь, так как никак не могу сформировать запрос с сортировкой и накопленной суммой.

Суть в следующем.

Имеются данные:

Имя Число
sub1 8
sub2 7
sub3 2
sub4 9
sub5 21



Получаем накопленную сумму:

Имя Число Накопитель
sub1 8 8
sub2 7 15
sub3 2 17
sub4 9 26
sub5 21 47

Все бы ничего, только сначала необходимо отсортировать по числу, а потом накопитель считать. Никак не могу понять, как же воткнуть сортировку вперед. Пробовал отдельным запросом, ничего не выходит.

Результат должен быть следующим:

Имя Число
sub3 2
sub2 7
sub1 8
sub4 9
sub5 21

Имя Число Накопитель
sub3 2 2
sub2 7 9
sub1 8 17
sub4 9 26
sub5 21 47

Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.07.2011, 14:38
Ответы с готовыми решениями:

Накопленная сумма
Как сделать, чтобы у покупателя накапливалась сумма покупок: купил еще одну вещь и ее стоимость приплюсовалась к той сумме, которую...

Накопленная сумма чисел
есть 2 поля Memo - в первое вводятся числа, во втором - должна появиться накопленая сумма этихчисел. тоесть в первое поле ввожу я: 1 2 ...

Определить, через сколько месяцев накопленная сумма превысит B руб., при условии, что начальный вклад равен нулю
Задача: Клиент переводит на банковский счёт в начале каждого месяца A руб., банковская ежемесячная ставка p%. Определить, через сколько...

11
59 / 59 / 11
Регистрация: 21.07.2009
Сообщений: 78
11.07.2011, 08:38
Сортировка может происходить по нескольким полям через запятую
Oracle 11 SQL
1
ORDER BY [Число    ],[Накопитель]
0
8 / 8 / 2
Регистрация: 20.02.2009
Сообщений: 139
11.07.2011, 09:48  [ТС]
Ivan___, это мне ясно. Мне не ясно, как сначала отсортировать, а потом считать. Просто так не выходит. Я ставил сортировку, как в самом запросе, так и во вложенном (накопленная) и никак должного результата добиться не выходит.
0
59 / 59 / 11
Регистрация: 21.07.2009
Сообщений: 78
11.07.2011, 10:04
Может тогда попробовать с помощью группировки? Мне кажется, Ваш метод имеет место быть, но он как-то сложноват с точки зрения написания запроса.
0
8 / 8 / 2
Регистрация: 20.02.2009
Сообщений: 139
11.07.2011, 10:29  [ТС]
Ivan___, если бы было все так просто )) Мне нужна именно накопленная сумма, именно после сортировки столбца "Число". Group by выполняет другую задачу. Здесь нет повторений или промежуточных, уже все обсчитано и необходимо подготовить таблицу с данными для дальнейшего использования. Накопитель считается только после сортировки столбца "Число". По-другому не выходит.
0
8 / 8 / 2
Регистрация: 20.02.2009
Сообщений: 139
12.07.2011, 23:59  [ТС]
Да, ладно вам, неужели нет такого способа и придется делать расчеты уже в программе?
0
 Аватар для devart dbforge
134 / 119 / 0
Регистрация: 30.06.2010
Сообщений: 221
13.07.2011, 15:19
Так пойдет?

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
WITH _cte AS(
  SELECT 'sub1' AS sub, 8 AS num
  UNION ALL
  SELECT 'sub2' AS sub, 7 AS num
  UNION ALL
  SELECT 'sub3' AS sub, 2 AS num
  UNION ALL
  SELECT 'sub4' AS sub, 9 AS num
  UNION ALL
  SELECT 'sub5' AS sub, 21 AS num
  )
        
SELECT
  t.sub,
  t.num,
  (SELECT sum(num) FROM _cte WHERE num<=t.NUM) AS num_itog
FROM
  _cte t
ORDER BY
  t.num
1
8 / 8 / 2
Регистрация: 20.02.2009
Сообщений: 139
13.07.2011, 15:59  [ТС]
Цитата Сообщение от devart dbforge Посмотреть сообщение
Так пойдет?

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
WITH _cte AS(
  SELECT 'sub1' AS sub, 8 AS num
  UNION ALL
  SELECT 'sub2' AS sub, 7 AS num
  UNION ALL
  SELECT 'sub3' AS sub, 2 AS num
  UNION ALL
  SELECT 'sub4' AS sub, 9 AS num
  UNION ALL
  SELECT 'sub5' AS sub, 21 AS num
  )
        
SELECT
  t.sub,
  t.num,
  (SELECT sum(num) FROM _cte WHERE num<=t.NUM) AS num_itog
FROM
  _cte t
ORDER BY
  t.num
Я делал практически также, только в "Where" Добавлял еще одно условие (идентификатор по принадлежащей группе).
Обалдеть, столько прыгал вокруг этого запроса, а внимательность подвела: допустил ошибку в указании where.

Большое спасибо.
0
8 / 8 / 2
Регистрация: 20.02.2009
Сообщений: 139
17.07.2011, 18:35  [ТС]
Развивая эту тему, появляется новая задачка сортировки и накопителя.
Как подсчитать накопленную второго столбца (num2) по уже отсортированному первому (num)?
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
WITH _cte AS (SELECT     'sub1' AS sub, 8 AS num, 9 AS num2
                                UNION ALL
                                SELECT     'sub2' AS sub, 7 AS num, 15 AS num2
                                UNION ALL
                                SELECT     'sub3' AS sub, 2 AS num, 3 AS num2
                                UNION ALL
                                SELECT     'sub4' AS sub, 9 AS num, 5 AS num2
                                UNION ALL
                                SELECT     'sub5' AS sub, 21 AS num, 8 AS num2)
    SELECT     TOP (100) PERCENT sub, num,
                                (SELECT     SUM(num) AS Expr1
                                  FROM          _cte AS _cte_1
                                  WHERE      (num <= t.num)) AS num_itog, num2
     FROM         _cte AS t
     ORDER BY num
Спасибо.
0
8 / 8 / 2
Регистрация: 20.02.2009
Сообщений: 139
20.07.2011, 22:20  [ТС]
Новый запрос не помог, да и городить огород тоже не хочется. Какие -либо манипуляции по образу и подобию не дали результатов. Если, кто делал подобные запросы прошу помочь.
0
 Аватар для Airhand
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
21.07.2011, 15:22
А может попробовать select ... into tableName, а последнюю таблицу tableName создавать перед этим запросом create table, перед этим дропать её, чтоб ничего не снилось.
0
8 / 8 / 2
Регистрация: 20.02.2009
Сообщений: 139
23.07.2011, 18:10  [ТС]
Жестко я с эти этим затупил ) Сегодня пришло озарение и задача решена.
Вот код, если кому понадобится:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
WITH _cte AS (SELECT     'sub1' AS sub, 8 AS num, 9 AS num2
                                UNION ALL
                                SELECT     'sub2' AS sub, 7 AS num, 15 AS num2
                                UNION ALL
                                SELECT     'sub3' AS sub, 2 AS num, 3 AS num2
                                UNION ALL
                                SELECT     'sub4' AS sub, 9 AS num, 5 AS num2
                                UNION ALL
                                SELECT     'sub5' AS sub, 21 AS num, 8 AS num2)
    SELECT     TOP (100) PERCENT sub, num, num2,
                                (SELECT     SUM(num) AS Expr1
                                  FROM          _cte AS _cte_1
                                  WHERE      (num <= t.num)) AS num_itog,
                                (SELECT     SUM(num2) AS Expr1
                                  FROM          _cte AS _cte_1
                                  WHERE      (num <= t.num)) AS num_itog2
     FROM         _cte AS t
     ORDER BY num
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.07.2011, 18:10
Помогаю со студенческими работами здесь

Накопленная задолженность
На конец марта долг за предприятием 104 рубля. При смене расчетного периода, на апрель, программа предлагает ввести документ...

Через какое время энергия накопленная в контуре уменьшится?
в контуре, добротность которого Q = 50 кГц возбуждаются затухающие колебания. Через какое время энергия накопленная в контуре, уменьшится в...

Сумма строк в матрице и сортировка
Дана матрица в ней нужно посчитать сумму каждой строки, и переставить строки по возрастанию, Заметка: Найти сумму строки, и оперировать...

Одномерный массив: максимальный, сумма и сортировка
помогите пожалуйста :) В одномерном массиве, состоящем из N действительных элементов, вычислить: • максимальный по модулю элемент...

Сортировка, минимальное значение, сумма елементов
1) Определить сумму элементов, расположенных после первого отрицательного элемента. 2) Найти минимальное значение, получаемое в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru