【发布时间】:2019-11-24 17:37:17
【问题描述】:
我正在寻找一种方法来找出来自#Orders 的哪些行集合与#Pallets 最匹配。
在下面的示例中,@palletId = 1000 作为查询的输入,结果应该只能与 'Order2'(100% 匹配) 和 'Order4'(75%匹配)。在这种情况下,我想要的结果是“Order2”。
输入 @palletId = 4000 应该 100% 与“Order4”匹配,并且没有其他匹配项。
DECLARE @paletId bigint = 1000
CREATE TABLE #Pallets ([PalletId] bigint, [Item] nvarchar(16), [Quantity] int)
CREATE TABLE #Orders ([OrderId] nvarchar(16), [Item] nvarchar(16), [Quantity] int)
INSERT INTO #Pallets ([PalletId], [Item], [Quantity]) VALUES
(1000, 'item1', 10),
(1000, 'item2', 10),
(1000, 'item3', 10),
(4000, 'item1', 10),
(4000, 'item2', 10),
(4000, 'item3', 10),
(4000, 'item4', 10)
INSERT INTO #Orders ([OrderId], [Item], [Quantity]) VALUES
('Order2', 'item1', 10),
('Order2', 'item2', 10),
('Order2', 'item3', 10),
('Order1', 'item1', 10),
('Order1', 'item2', 10),
('Order1', 'item3', 5),
('Order3', 'item2', 5),
('Order3', 'item3', 10),
('Order4', 'item1', 10),
('Order4', 'item2', 10),
('Order4', 'item3', 10),
('Order4', 'item4', 10),
('Order5', 'item1', 5),
('Order5', 'item2', 5),
('Order5', 'item3', 5),
DROP TABLE #ItemTable
DROP TABLE #LocationTable
DROP TABLE #BookingTable
DROP TABLE #OrderTable
一直在尝试使用以下示例作为基础来解决它,但没有设法得到我想要的结果。
https://stackoverflow.com/a/27060384/2975371
https://stackoverflow.com/a/104001/2975371
提前致谢。
【问题讨论】:
-
只是为了确保
Order2包含item1、item2和item3- 这意味着它与#Pallets表上的item1/2/3的两个实例相关?您可能还想查看my answer 的类似问题。 -
@ZoharPeled 并且数量与正确的项目完全匹配。这主要是问题所在。因为 order5 也可以匹配,但数量仅为所需数量的 50%。
标签: sql sql-server tsql