我有三张M-M关系表:
我在尝试找出如何只检索Inventory.Stock ASC
订购的第一个相关广告资源项目的所有捆绑包时遇到了很多麻烦,但也返回了Bundles_Inventory.InventoryRequired
字段。
我已经看到了对类似问题的其他回复,但没有一个考虑到自定义联接表。
如何选择Inventory.Stock ASC订购的所有捆绑包,还包括该记录的Bundles_Inventory.InventoryRequired?
关于@imran
原来我有:
SELECT b.Id, b.Name, i.Id, i.Name, i.Stock, bi.InventoryRequired from Bundles b
INNER JOIN Bundles_Inventory bi ON b.Id = bi.BundleId
INNER JOIN Inventory i ON bi.InventoryId = i.Id
WHERE b.ClientId = @clientId
ORDER BY i.Stock ASC
但显然这会让我获得有关Bundles
表的重复数据..
然后我尝试了
SELECT TOP 1 b.Id, b.Name, i.Id, i.Name, i.Stock, bi.InventoryRequired from Bundles b
INNER JOIN Bundles_Inventory bi ON b.Id = bi.BundleId
INNER JOIN Inventory i ON bi.InventoryId = i.Id
WHERE b.ClientId = @clientId
ORDER BY i.Stock ASC
现在,我正试图弄清楚如何应用Group By
来解决这个问题。
答案 0 :(得分:2)
您可以在大多数数据库中使用row_number()
执行此操作:
select b.*, i.*
from bundles b join
(select i.*,
row_number() over (partition by bi.bundleid order by i.stock desc) as seqnum
from bundles_inventory bi join
Inventory i
on bi.InventoryId = i.Id
) i
on b.id = bi.bundleid
where seqnum = 1;
您可以在外部查询中添加where
子句。