powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Возможно ли восстановление данных?
4 сообщений из 4, страница 1 из 1
Возможно ли восстановление данных?
    #37673884
AlexMAS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Возникла задачка "восстановить" данные... Не могу дать математическое обоснование возможности данного восстановления. Сначала опишу задачу в общем, а потом приведу конкретный пример с "цифрами".

Искомая выборка должна состоять из четырех полей: Expected(Field1, Field2, Field3, Quantity). По условию известны две группировки, которые были получены по искомым данным, а именно: Group13(Field1, Field3, Quantity) и Group23(Field2, Field3, Quantity). Иначе говоря, известные данные могут быть получены из искомых данных следующим образом:

Код: sql
1.
2.
3.
4.
5.
-- Group13
select Field1, Field3, Quantity = sum(Quantity) from Expected group by Field1, Field3

-- Group23
select Field2, Field3, Quantity = sum(Quantity) from Expected group by Field2, Field3



Теперь приведу "жизненный" пример. Для краткости введем обозначения: P - подрядчик, S - склад, N - номенклатура, Q - количество. Допустим, искомая выборка ("оригинальные данные", которые нужно восстановить) имеет следующий вид:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
-- Искомая выборка - "Подрядчик - Склад - Номенклатура - Количество"
declare @expected table(P nvarchar(5), S nvarchar(5), N nvarchar(5), Q float)
insert into @expected(P, S, N, Q) values ('P1', 'S1', 'N1', 20)
insert into @expected(P, S, N, Q) values ('P1', 'S2', 'N1', 30)
insert into @expected(P, S, N, Q) values ('P1', 'S1', 'N2', 200)
insert into @expected(P, S, N, Q) values ('P1', 'S2', 'N2', 300)
insert into @expected(P, S, N, Q) values ('P2', 'S1', 'N1', 10)
insert into @expected(P, S, N, Q) values ('P2', 'S2', 'N1', 1)
insert into @expected(P, S, N, Q) values ('P2', 'S1', 'N2', 100)
insert into @expected(P, S, N, Q) values ('P2', 'S2', 'N2', 2)



Известны значения двух группировок:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
-- Известная группировка - "Подрядчик - Номенклатура - Количество",
-- которая может быть получена запросом вида:
-- select P, N, Q = sum(Q) from @expected group by P, N
declare @givenPN table(P nvarchar(5), N nvarchar(5), Q float)
insert into @givenPN(P, N, Q) values ('P1', 'N1', 50)
insert into @givenPN(P, N, Q) values ('P2', 'N1', 11)
insert into @givenPN(P, N, Q) values ('P1', 'N2', 500)
insert into @givenPN(P, N, Q) values ('P2', 'N2', 102)

-- Известная группировка "Склад - Номенклатура - Количество",
-- которая может быть получена запросом вида:
-- select S, N, Q = sum(Q) from @expected group by S, N
declare @givenSN table(S nvarchar(5), N nvarchar(5), Q float)
insert into @givenSN(S, N, Q) values ('S1', 'N1', 30)
insert into @givenSN(S, N, Q) values ('S2', 'N1', 31)
insert into @givenSN(S, N, Q) values ('S1', 'N2', 300)
insert into @givenSN(S, N, Q) values ('S2', 'N2', 302)



Интересует принципиальная возможность "восстановления".

Заранее спасибо! :)
...
Рейтинг: 0 / 0
Возможно ли восстановление данных?
    #37674065
kDnZP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexMASИнтересует принципиальная возможность "восстановления"
возможности нет

* Ну сами поразмышляйте, возможно ли восстановить из числа 5 как оно получено? Это было 2+3, 3+2, 1+2+2, али еще какой вариант?...
...
Рейтинг: 0 / 0
Возможно ли восстановление данных?
    #37674195
ALKIR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно восстановить таблицу @expected таким образом, чтобы из нее можно было получить @givenPN и @givenSN.

Да, с высокой долей вероятности можно утверждать, что такая таблица не будет соответствовать изначальной таблице, но возможно это и не нужно чтобы она точно соответствовала, возможно главное, что такая таблица хотя бы будет! :)

- сумма по N из @givenPN = сумме по N из @givenSN
summ(q) where N = 'N1' = 61

- необходимо получить все возможные сочетания P S N
Так для N1 - это
('P1', 'S1', 'N1')
('P1', 'S2', 'N1')
('P2', 'S1', 'N1')
('P2', 'S2', 'N1')

- последовательно обходим эти сочетания и вычисляем Q
Q ('P1', 'S1', 'N1')+Q ('P1', 'S2', 'N1') = 50
Q ('P2', 'S1', 'N1')+Q ('P2', 'S2', 'N1') = 11

Q ('P1', 'S1', 'N1')+ Q ('P2', 'S1', 'N1') = 30
Q ('P1', 'S2', 'N1')+ Q ('P2', 'S2', 'N1') = 31

решаем систему уравнений... дополнительно можно наложить условие, что все Q>=0
...
Рейтинг: 0 / 0
Возможно ли восстановление данных?
    #37676077
AlexMAS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за участие.

@ALKIR Определитель матрицы равен нулю, что говорит о бесконечном множестве решений, о котором говорил @kDnZP. К счастью, ситуация разрешилась тем, что в моей задаче "склад" завязан на конкретного (одного) "подрядчика".
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Возможно ли восстановление данных?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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