MSSQL查询按权重选择顶部

MSSQL查询按权重选择顶部,sql,sql-server,Sql,Sql Server,请参阅下表。每个目标产品Id都有100个推荐产品Id。我想通过权重选择前6名。我试图用have实现它,但不幸失败了。你能帮我构造这样的查询吗 谢谢 谢谢你的查询!我是否应该通过加权**DESC**来添加订单,以选择最加权的产品?@WildGoat的确,如果你想要最加权的产品,你应该按照DESC进行订购。我将更新我的帖子。你可能还需要在最底部添加一个ORDER BY。否则,您可能会看到奇怪的结果,如第1行到第3行之前出现的第4行和第5行。此外,在我的数据中,我有时会复制推荐的产品id。是否有任何方

请参阅下表。每个目标产品Id都有100个推荐产品Id。我想通过权重选择前6名。我试图用have实现它,但不幸失败了。你能帮我构造这样的查询吗


谢谢

谢谢你的查询!我是否应该通过加权**DESC**来添加订单,以选择最加权的产品?@WildGoat的确,如果你想要最加权的产品,你应该按照DESC进行订购。我将更新我的帖子。你可能还需要在最底部添加一个ORDER BY。否则,您可能会看到奇怪的结果,如第1行到第3行之前出现的第4行和第5行。此外,在我的数据中,我有时会复制推荐的产品id。是否有任何方法可以将它们过滤掉,以便目标产品id和推荐产品id之间的映射最多为1?您希望如何处理关系?除非您确保其ORDER BY子句是唯一的,否则行号将随机选取一个。如果您想返回所有平局,即使这意味着7+条记录,也可以使用排名。也有密集的排名,但您不希望在这个用例中出现这种情况。
;WITH RemoveDuplicatesCTE AS
(
    SELECT   Targeted_Product_Id,
             Recommended_Product_Id,
             Weighting
             ROW_NUMBER() OVER(PARTITION BY Targeted_Product_Id,Recommended_Product_Id ORDER BY Targeted_Product_Id,Recommended_Product_Id) AS rn
    FROM     Targeted_Product
)
,ProductsCTE AS
(
    SELECT   Targeted_Product_Id,
             Recommended_Product_Id,
             Weighting
             ROW_NUMBER() OVER(PARTITION BY Targeted_Product_Id ORDER BY Weighting DESC) AS rn
    FROM     RemoveDuplicatesCTE
    WHERE    rn = 1
)
SELECT   Targeted_Product_Id,
         Recommended_Product_Id,
         Weighting
FROM     ProductsCTE 
WHERE    rn<=6
ORDER BY Targeted_Product_Id,
         rn DESC