【发布时间】:2015-06-16 00:33:52
【问题描述】:
我想匹配买家和卖家。我这样做是为了让它尽可能简单。
我有一张桌子:tmpSales。在其中,我有一个 TransID、BuyerID、SellerID、Item 和 Date。
有时买家也是卖家,反之亦然。
我想要的是一个买家卖给卖家,而同一卖家卖给同一买家的记录。
我有这个查询,它工作正常:
SELECT *
FROM [dbo].[tmpSales] T1
INNER JOIN [dbo].[tmpSales] T2
ON T1.[BuyerID] = T2.[SellerID]
AND T2.[BuyerID] = T1.[SellerID]
但是,它为每个匹配返回 2 条记录。有没有办法返回一条记录,同时存在 BuyerID 和 SellerID?
示例数据如下所示:
TransID BuyerID SellerID ItemID Date
1 10012 10032 65 10/15/2014
2 11111 10012 120 12/15/2014
3 10032 10012 32 2/2/2015
4 11111 10032 30 2/10/2015
5 10012 11111 45 3/1/2015
在这种情况下,我可以看到 10012 和 10032 都相互买卖,10012 和 也是如此>11111。我只想要这样的东西:
ID1 ID2
10012 10032
10012 11111
数据将不断增长,因此它必须是动态的(即我不能在代码中添加“Where BuyerID = '10012'”之类的内容)。
编辑:实际上,我想做的是把它变成一个视图或存储过程,并将 2 个 ID 传递给它,让它告诉我是否存在相互匹配。
【问题讨论】:
-
其实很简单,要么用 CTE/Derived table 解决方案,要么用 WHERE EXISTS() 解决方案。
-
只是为了添加@TabAlleman 所说的内容,以避免在每场比赛中获得两条记录(即买家 1 与卖家 2,买家 2 与卖家 1),只需使用
WHERE子句断言BuyerId < SellerId(反之亦然),您每场比赛只会获得一条记录。如果有多个可能的 macthe,请使用SELECT DISTINCT。
标签: sql sql-server