SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Microsoft SQL Server » суммировать пропорции, хранящиеся в таблице
суммировать пропорции, хранящиеся в таблице [сообщение #5231] Wed, 17 July 2024 22:42 Переход к следующему сообщению
kmvp в настоящее время не в онлайне  kmvp
Сообщений: 1
Зарегистрирован: July 2024
Junior Member
CREATE TABLE dbo.tab1
(
  idrow INT NOT null IDENTITY,
  group1 VARCHAR(10) NOT NULL,
  c1 NUMERIC(10,2) NOT NULL,
  c2 NUMERIC(10,2) NOT NULL
)
GO

INSERT INTO tab1 (
  group1,  --группа
  c1,    --числитель (сверху)
  c2    --знаменатель (снизу)
)
VALUES
('1', 1, 2),
('1', 2, 1.4),
('1', 3, 5.2),
('2', 1, 0.6),
('2', 4, 0.5),
('2', 3, 0.9)
для хранения пропорций в таблице хранится числитель и знаменатель (для одно группы их может быть несколько)
нужно для каждой группы таких значений получить суммарные значения в том же виде: отдельно числитель и отдельно знаменатель

например, для группы 1 правильный ответ в виде результирующей строки будет таким:

group1 c1 c2
1 36.48 14.56
потому что:
1/2 + 2/1.4 + 3/5.2 = по правилам школьной математики приводим к общему знаменателю = 1 * 1.4 * 5.2 / (2 * 1.4 * 5.2) + 2 * 2 * 5.2 / 1.4 * 2 * 5.2 + 3 * 2 * 1.4 / 5.2 * 2 * 1.4 = (7.28 + 20.8 + 8.4) / 14.56 = 36.48 / 14.56
надеюсь не наделал ошибок при расчете

либо если, скажем, получились в результате значения, которые можно сократить, типа:
group1 c1 c2
1 30 10
то хорошо бы (хотя не обязательно) сократить их и получить:
group1 c1 c2
1 3 1
что то типа наименьший общий делитель (или наибольшее общее кратное, уже со школьных времен забыл)

как такое решить на sql?
я могу наколхозить некрасивый код и решить это, но может есть более удачный вариант?
не знаю, как умножить переменное количество значений, когда их может быть как тут всего 3 или много (вот суммировать потом их просто).

вот так пытался сделать, но это не правильно, т.к. нужно перемножить другие числа, дальше не кумекается:
хотелось бы избежать рекурсивного cte, но если никак, то ок...

SELECT *, t1.c1 * t2.c1
FROM tab1 AS t1
JOIN tab1 AS t2 ON t1.group1 = t2.group1 AND t1.idrow <> t2.idrow
WHERE t1.group1 = '1'
Re: суммировать пропорции, хранящиеся в таблице [сообщение #5250 является ответом на сообщение #5231] Fri, 19 July 2024 13:09 Переход к предыдущему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 360
Зарегистрирован: June 2022
Senior Member
Я бы делал вложенными запросами. Вначале поделил, а потом просуммировал. К общему знаменателю не приводил.
Если же нужно очень точно, через приведение, то пишите хранимку, в нее ряд числителей и знаменателей, и приведение в ней с расчетом.
Предыдущая тема: Не получается связать таблицы в БД SQL Menegement Studio
Следующая тема: Грамотное и эффективное резервное копирование. Бэкап MS SQL
Переход к форуму:
  


Текущее время: Thu Nov 21 15:08:26 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00976 секунд