Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как сопоставить две таблицы, чтобы общая сумма по артикулу совпадала?  [new]
minya13_85
Member

Откуда: Москва
Сообщений: 598
Версия:
Microsoft SQL Server 2008 (SP3) - 10.0.5520.0 (X64) 
	Jul 11 2014 16:11:50 
	Copyright (c) 1988-2008 Microsoft Corporation
	Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)


Есть две таблицы вида:
DECLARE @t TABLE([ID] INT,Artikul nvarchar(50), ves float,identifier nvarchar(50))

INSERT INTO @t([ID],Artikul,ves,identifier)

SELECT 0,'01Б',1.75,'00001' UNION ALL
SELECT 1,'01Б',1.8,'00002' UNION ALL
SELECT 2,'01Б',1.25,'00003' UNION ALL
SELECT 3,'01Б',1.45,'00004' UNION ALL
SELECT 4,'01Б',1.02,'00010' UNION ALL
SELECT 5,'01С',1.38,'00005' UNION ALL
SELECT 6,'01С',1.48,'00007' UNION ALL
SELECT 7,'01С',1.38,'00006' UNION ALL
SELECT 8,'01С',1.85,'00011' UNION ALL
SELECT 9,'01К',1.45,'00008' UNION ALL
SELECT 10,'01К',1.45,'00009' 
-------------------------------------
DECLARE @b TABLE([ID] INT,Artikul nvarchar(50), ves float,identifier nvarchar(50))

INSERT INTO @b([ID],Artikul,ves,identifier)

SELECT 0,'01Б',1.56,'01001' UNION ALL
SELECT 1,'01Б',1.82,'01002' UNION ALL
SELECT 2,'01Б',1.15,'01003' UNION ALL
SELECT 3,'01Б',1.49,'01004' UNION ALL
SELECT 4,'01Б',1.00,'01010' UNION ALL
SELECT 5,'01Б',1.65,'01005' UNION ALL
SELECT 6,'01Б',1.28,'01007' UNION ALL
SELECT 7,'01Б',1.43,'01006' UNION ALL
SELECT 8,'01Б',1.34,'01011' UNION ALL
SELECT 9,'01Б',1.7,'01008' UNION ALL
SELECT 10,'01Б',1.26,'01009'UNION ALL 
SELECT 11,'01С',1.24,'01101' UNION ALL
SELECT 12,'01С',1.26,'01102' UNION ALL
SELECT 13,'01C',1.37,'01103' UNION ALL
SELECT 14,'01С',1.54,'01104' UNION ALL
SELECT 15,'01С',1.96,'01110' UNION ALL
SELECT 16,'01С',1.53,'01105' UNION ALL
SELECT 17,'01С',1.29,'01107' UNION ALL
SELECT 18,'01С',1.29,'01106' UNION ALL
SELECT 19,'01С',1.64,'01111' UNION ALL
SELECT 20,'01С',1.4,'01018'  UNION ALL
SELECT 21,'01С',1.3,'01109'  UNION ALL 
SELECT 22,'01К',1.9,'01206' UNION ALL
SELECT 23,'01К',1.47,'01211' UNION ALL
SELECT 24,'01К',1,'01218'  UNION ALL
SELECT 25,'01К',1.3,'01209'  


Таблица @t Это исходник, к нему надо сопоставить таблицу @b, чтобы суммарный вес по Артикулу совпадал.
В таблицах identifier это уникальное поле. ID - это счетчик
select artikul,sum(ves) as ves,count(identifier) as sht from @t group by Artikul

в таблице @t артикулу 01Б, соответствует 5 штук, общим весом 7.27, нужно в таблице @b найти любые артикула 01Б, чтобы общий вес дал также 7.27 и кол-во = 5 шт. Как только нашел, выход. Если таких весов несколько, берем первый попавшийся. В итоге получаем таблицу вида, где identifierNEW , vesNEW это столбцы из таблицы @b:

id ArtikulvesidentifieridentifierNEWvesNEW
001Б1.7500001010041.49
101Б1.800002010021.82
201Б1.2500003010091.26
301Б1.4500004010101
401Б1.0200005010081.7
501С1.38 00005011071.29
601С1.48 00007011091.3
701С1.38 00006011041.54
801С1.8500011011101.96
901К1.45 00008012061.9
1001К1.4500009012181

Сами сопоставления по identifier , могут быть в любом порядке.
13 мар 17, 17:55    [20290778]     Ответить | Цитировать Сообщить модератору
 Re: Как сопоставить две таблицы, чтобы общая сумма по артикулу совпадала?  [new]
minya13_85
Member

Откуда: Москва
Сообщений: 598
Еще, если точного совпадения не будет, то вывести максимально приближенное.
13 мар 17, 18:09    [20290858]     Ответить | Цитировать Сообщить модератору
 Re: Как сопоставить две таблицы, чтобы общая сумма по артикулу совпадала?  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
minya13_85, это задача о рюкзаке, поищите по форуму
13 мар 17, 18:38    [20290979]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить